参考链接C++实现
实现 atoi,将字符串转为整数。
之前走入一个误区,只用一个for循环,想实现所有的跳过和判断操作,但遇到不通过的案例实在太多,改得不耐烦了,参考了一下C++的实现,才发现可以直接在计算之前,用循环跳过空格,并且跳完所有的空格之后,如果是整数,下一个字符必定是 +/- 或数字。
然后再进行计算就可。
并把判断是否超出范围的判断放到内部,只有目前累加的值超过int范围,就返回。
class Solution {
public int myAtoi(String str) {
char[] c = str.toCharArray();
int op = 1;
int p = 0;
Long result = 0L;
while(p < c.length && c[p] == ' ') ++p; // 跳过所有空格
if(p < c.length && (c[p] == '+' || c[p] == '-')) {
if(c[p] == '-')
op = -1;
p++;
}
for(int i = p; i < c.length; i++){
if(c[i]>='0' && c[i] <= '9'){
result=result*10+c[i]-'0';
if(op == -1 && result * op < Integer.MIN_VALUE) return Integer.MIN_VALUE;
if(op == 1 && result > Integer.MAX_VALUE) return Integer.MAX_VALUE;
}else{
break;
}
}
return result.intValue()* op;
}
}