这个题目好多边界情况,需要注意的几个

  1. 以空格或非数字结尾,break

  2. 注意前面可以有+ 或者 - 但是不能多于一个

  3. 如果以不是数字开头 则返回0

  4. 还是要注意整数越界

public class Solution {
    public int myAtoi(String str) {
        List<Integer> number = new ArrayList<Integer>();
        int j = 0;
        boolean isStart = false;
        boolean isNegative = false;
        for (int i = 0; i < str.length(); i++) {
            if (!isStart) {
                if (str.charAt(i) == ' ') {
                    continue;
                } 
                else if (str.charAt(i) == '+') {
                    isStart = true;
                    continue;
                } else if (str.charAt(i) == '-') {
                    isNegative =true;
                    isStart = true;
                    continue;
                } else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                    number.add(str.charAt(i) - 48);
                    isStart = true;
                    continue;
                } else {
                    return 0;
                }
            } else {
                if (str.charAt(i) == ' ') {
                    break;
                } else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                    number.add(str.charAt(i) - 48);
                    continue;
                } else {
                    break;
                }
            }
        }
        
        if (number.size() == 0) {
            return 0;
        }
        
        int result = 0;
        
        for (int i = 0; i < number.size(); i++) {
            result = result * 10 + number.get(i);
            if (result > 214748364 && number.size() >= i+2) {
                if (isNegative) {
                    return -2147483648;
                } else {
                    return 2147483647;
                }
            } else if (result == 214748364 && number.size() >= i+2) {
                if (isNegative) {
                    if (number.get(i+1) >= 8) {
                        return -2147483648;
                    } else {
                        result = result * 10 + number.get(i+1);
                        return -result;
                    }
                } else {
                    if (number.get(i+1) >= 7) {
                        return 2147483647;
                    } else {
                        result = result * 10 + number.get(i+1);
                        return result;
                    }
                }
            }
        }
        
        if (isNegative) {
            return -result;
        }
        
        return result;
        
    }
}

chenatu
106 声望12 粉丝