[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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值