将字符串转成整数,跳过前面的空格。。然后转的时候注意防止溢出。。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; } }