重点需要考虑地问题
1.从哪里开始为数字:先忽略前面所有的空格字符,然后判断第一个非空格字符是否为正号,负号,或者数字,如果不是,则返回0
2.判断越界的情况,ans*10+digit > Integer.MAX.VALUE时越界,可是ans*10+digit的最大表示范围就是Integer.MAX.VALUE,所以这样就没法比较了,但是可以通过比较ans > (Integer.MAX.VALUE - digit) / 10 来判断是否越界
具体代码如下
public static int Myatoi(String s){
char []c = s.toCharArray();
int len = s.length();
int idx = 0;
for(;idx < len;idx++){
if(c[idx] != ' ') break;
}
if(idx == len) return 0;
boolean negative = false;
int ans = 0;
if(c[idx] == '-'){
negative = true;
}
else if(c[idx] == '+');
else if(Character.isDigit(c[idx])){
ans += c[idx] - '0';
}
else if(!Character.isDigit(c[idx])){//判断这个字符是不是数字,如果不是则直接返回0
return 0;
}
idx = idx + 1;
while(idx < len){
if(!Character.isDigit(c[idx]))
break;
int digit = c[idx] - '0';
if(ans > (Integer.MAX_VALUE - digit) / 10){//判断是否越界
if(negative){
return Integer.MIN_VALUE;
}
else
return Integer.MAX_VALUE;
}
ans = ans * 10 + digit;
idx++;
}
return negative ? -ans : ans;
}