1. 程式人生 > >[leetcode]8. String to Integer (atoi)

[leetcode]8. String to Integer (atoi)

這一題在思路上還是比較簡單。
注意邊界情況。

結合上一個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;
    }
}