记住步骤就好啦:

  1. 处理空字符串
  2. 忽略前置空格
  3. 保存符号
  4. 处理非法输入
  5. 处理溢出

多想无益,就住就行了。

import java.util.*;

public class Solution {
    /**
     * 
     * @param str string字符串 
     * @return int整型
     */
    public int atoi (String str) {
        // write code here
        int idx = 0;
        int sign = 1;
        int val = 0;

        // 1. 空字符串
        if (str.length() == 0) return 0;

        // 2. 忽略前置空
        while (str.charAt(idx) == ' ') idx++;

        // 3. 记录符号
        if (str.charAt(idx) == '-') {sign = -1; idx++;}
        if (str.charAt(idx) == '+') idx++;

        for (; idx < str.length(); idx++) {
            // 4. 处理非法符合
            if (str.charAt(idx) > '9') break;

            // 5. 处理溢出
            if (val > Integer.MAX_VALUE / 10 ||    //乘上 10 以后就会超出最大范围
                //乘上 10 以后没有超出最大范围,但是个位数比最大值的个位数大
                (val == Integer.MAX_VALUE / 10 && Integer.MAX_VALUE % 10 < str.charAt(idx) - '0')) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            val = val * 10 + str.charAt(idx) - '0';
        }
        return val * sign;
    }
}