leetcode题解-8. String to Integer (atoi)

题意:将一个字符串表示的数字转化为 integer。

分析:
1. 首先需要丢弃字符串前面的空格;
2. 可能有正负号(注意只取一个,如果有多个正负号,那么这个字符串是无法转换的,返回0。比如测试用例里就有个“+-2”);
3. 字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分,如“-00123a66”返回为“-123”;
4. 如果超出int的范围,返回边界值(2147483647或-2147483648)。

如果不看提示的话,很少会有人一下子写对。首先条件可能考虑不周,其次就算考虑到了,怎么处理也是个问题,比如条件3和条件4,所以在面试的时候还是应该多和面试官进行沟通。

class Solution {
    public int myAtoi(String str) {
        int num = 0;
        int sign = 1;
        int n = str.length();
        int i = 0;
        if(n == 0) return 0;
        while (str.charAt(i) == ' ' && i < n)
            i++;
        if (str.charAt(i) == '+') {
            i++;
        } else if (str.charAt(i) == '-') {
            sign = -1;
            i++;
        }
        for (; i < n; i++) {
            if (str.charAt(i) < '0' || str.charAt(i) > '9')
                break;
            if (num > Integer.MAX_VALUE / 10
                    || (num == Integer.MAX_VALUE / 10 && (str.charAt(i) - '0') > Integer.MAX_VALUE % 10)) {
                return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            num = num * 10 + str.charAt(i) - '0';
        }
        return num * sign;
    }
    public static void main(String[] args) {
        Solution sl = new Solution();
        String str = "";
        System.out.println(sl.myAtoi(str));
    }
}

你可能感兴趣的:(Leetcode题解)