String to Integer (atoi)

将字符串转成整数,跳过前面的空格。。然后转的时候注意防止溢出。。total=total*10+digit

这个检查溢出的方式要掌握:最大整数除以10比total小(说明total*10就要溢出),当最大整数除以10等于total,且余数小于digit,那么执行上面公式也会溢出。。

if(Integer.MAX_VALUE/10<total||Integer.MAX_VALUE/10==total&&Integer.MAX_VALUE%10<digit)

       return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;

class Solution {
    public int myAtoi(String str) {
        int index=0,sign=1,total=0;
        
        if(str.length()==0) return 0;
        //删除前面空格
        while(str.charAt(index)==' '&&index<str.length())
            index++;
        
        //处理符号
        if(str.charAt(index)=='+'||str.charAt(index)=='-'){
            sign=(str.charAt(index)=='+')?1:-1;
            index++;
        }
        //转换然后避免溢出。
        while(index<str.length()){
            int digit=str.charAt(index)-'0';
            if(digit<0||digit>9) break;
            
            //检查溢出。也可以先算出total,然后反回去看看是否相等(因为溢出,(total-digit)/10就不等于上一次的total)。下面这个判断方法要掌握
            if(Integer.MAX_VALUE/10<total||Integer.MAX_VALUE/10==total&&Integer.MAX_VALUE%10<digit)
                return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
            
            total=total*10+digit;
            index++;
        }
        return total*sign;
        
    }
}
原文地址:https://www.cnblogs.com/xiaolovewei/p/8098533.html