Contents

停了2天,补上。二三题是水题。

找出符合题意的上升子序列,如果第一位为0就舍弃。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static String removeKdigits(String num, int k) {
StringBuilder sb = new StringBuilder(num);
while ( k > 0) {
int i = 0;
while(i < sb.length() -1 && sb.charAt(i) <= sb.charAt(i+1)){
i++;
}
sb.deleteCharAt(i);
k--;
}
while (sb.length() > 1 && sb.charAt(0) == '0'){
sb.deleteCharAt(0);
}
if (sb.length() == 0){
return "0";
}
return sb.toString();
}

判断一个数是不是回文数(可以优化,不用判断全部长度,按奇偶判断。)

1
2
3
4
5
6
7
8
9
10
11
12
13
public static boolean isPalindrome(int x) {
if( x < 0){
return false;
}
String s = Integer.toString(x);
int len = s.length();
for(int i = 0; i < len; i++){
if(s.charAt(i) != s.charAt(len -1-i)){
return false;
}
}
return true;
}

将一个不超过3999的罗马数字转化为整数。

import java.util.*;

public class Solution {
    public int romanToInt(String s) {
        Map<String, Integer>roman = new HashMap<String, Integer>();
        roman.put("I", 1);
        roman.put("V", 5);
        roman.put("X", 10);
        roman.put("L", 50);
        roman.put("C", 100);
        roman.put("D", 500);
        roman.put("M", 1000);
        int c = roman.get(""+s.charAt(0)); 
        for(int i = 1; i < s.length(); i++){
            if(roman.get(""+s.charAt(i)) > roman.get(""+s.charAt(i-1)) && ((s.charAt(i-1) == 'I') || (s.charAt(i-1) == 'X') ||(s.charAt(i-1) == 'C'))){
                c += roman.get(""+s.charAt(i));
            }else{
                c += roman.get(""+s.charAt(i)) - 2 * roman.get(""+s.charAt(i));
            }
        }
        return c;
    }
}

* Nim Game

一堆石子可以拿1,2,3个,给你一堆石子,看能赢的最大几率。
想起了小时候的抢24…只要你和对方的和每次是4的倍数,肯定是你赢。

public boolean canWinNim(int n) {
        return n % 4 == 0;
    }
Contents