这题整的整的挺玄乎的,不过用例还是不够刁钻,这里说的不够刁钻体现在溢出这里。
需要考虑的点:
1.去掉空格
2.前置就是有错也不管,来到第一个数字处开始计算
3.从数字开始之后,到另一个字母或者结尾就截止

    public int atoi(String str) {
        //-000001
        //-000000
        //-001000,前0省略,后0不能省
        if (str == null || str.length() == 0) return 0;
        str = str.replaceAll(" ", "");
        char[] cs = str.toCharArray();
        boolean isPositive = cs[0] != '-';
        int start = isNumber(cs[0]) ? 0 : 1;
        int n = str.length();
        //找到第一个数字所在
        while (start < n && !isNumber(cs[start])) {
            start++;
        }
        //找到正确数字字符串的结尾
        int end = start + 1;
        while (end < n && isNumber(cs[end])) {
            end++;
        }
        int res = 0;
        for (int i = start; i < end; i++) {
            if(Integer.MAX_VALUE/10<res){
                return isPositive?Integer.MAX_VALUE:Integer.MIN_VALUE;
            }//严谨一点需要处理等于的情况,具体就是看当前加入这个是否超过了7,8(这里的7,8是最值的结尾)
            res = res*10 + (cs[i] - '0');
        }
        return isPositive ? res : -res;
    }

    private boolean isNumber(char c) {
        return c - '0' >= 0 && c - '0' <= 9;
    }