8. String to Integer (atoi)

经典的atoi,注意各种条件的处理就好了。

话说我还以为要处理0x的16进制,处理科学计数法之类的。结果只要考虑正负号就好了。那就更简单了。

public class Solution {
    public int myAtoi(String str) {
        if (str == null || str.trim().length() == 0)
            return 0;

        char[] array = str.trim().toCharArray();  // 注意trim
        boolean positive = true;
        // 用一个stack存储digit
        LinkedList<Integer> stack = new LinkedList<Integer>();

        for (int i = 0; i < array.length; i++) {
            // 只有第一位字符可以是正负号
            if (i == 0 && array[i] == '+') {
                positive = true;
                continue;
            }
            if (i == 0 & array[i] == '-') {
                positive = false;
                continue;
            }
            // 如果不是数字,直接break,后面的字符都不管了
            if (!(array[i] >= '0' && array[i] <= '9')) {
                break;
            }

            stack.push(array[i] - '0');
        }

        long res = 0, i = 0;
        while (stack.size() > 0) {
            res += stack.pop() * Math.pow(10, i);
            i++;
        }

        if (!positive) {
            res = res * -1;
        }
        // 注意int的各种溢出条件
        if (res > Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        }
        if (res < Integer.MIN_VALUE) {
            return Integer.MIN_VALUE;
        }

        return (int) res;
    }
}

results matching ""

    No results matching ""