[leetcode]8. String to Integer (atoi)
阿新 • • 發佈:2018-11-17
這一題在思路上還是比較簡單。
注意邊界情況。
結合上一個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; } }