这一题在思路上还是比较简单。
注意边界情况。
结合上一个reverse integer来看,要注意处理溢出
for(int m=0;m<j;m++){
if(res>(Integer.MAX_VALUE-(int)k[m]+48)/10&&sign=='*')return 2147483647;
if(sign=='-'){
if((res*(-1))<Integer.MIN_VALUE/10||res*(-1)==Integer.MIN_VALUE/10&&
48-(int)k[m]<-8)
return -2147483648;
}
if(res>(Integer.MAX_VALUE-(int)k[m]+48)/10&&sign=='+')return 2147483647;
res=res*10+(int)k[m]-48;
}
完整代码如下:
class Solution {
public int myAtoi(String str) {
if(str==null||str.length()==0) return 0;
char []a=str.toCharArray();
int i=0;
char sign='*';
int j=0;
char []k=new char[a.length];
while(i<a.length&&a[i]==' '){
i++;
}
if(i<a.length){
if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){
return 0;
}
if(a[i]=='+'||a[i]=='-'){
sign=a[i];
i++;
}
}
j=0;
while(i<a.length&&a[i]>='0'&&a[i]<='9'){
k[j]=a[i];
System.out.println(k[j]);
i++;
j++;
}
int res=0;
for(int m=0;m<j;m++){
if(res>(Integer.MAX_VALUE-(int)k[m]+48)/10&&sign=='*')return 2147483647;
if(sign=='-'){
if((res*(-1))<Integer.MIN_VALUE/10||res*(-1)==Integer.MIN_VALUE/10&&
48-(int)k[m]<-8)
return -2147483648;
}
if(res>(Integer.MAX_VALUE-(int)k[m]+48)/10&&sign=='+')return 2147483647;
res=res*10+(int)k[m]-48;
}
if(sign=='-'){
res*=-1;
}
return res;
}
}