Problem8:String to Integer (atoi)

考虑情况不全面,在LeetCode上一直提交不通过,参考别人的解答方案。

题目要求如下:

1. 首先需要丢弃字符串前面的空格;

2. 然后可能有正负号(注意只取一个,如果有多个正负号,那么说这个字符串是无法转换的,返回0。比如测试用例里就有个“+-2”);

3. 字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分,如“-00123a66”返回为“-123”;

4. 如果超出int的范围,返回边界值(2147483647或-2147483648)。

java实现:

class Solution {
    public int myAtoi(String str) {
       //1、null or empty
        if(str==null||str.length()==0)
            return 0;
        //2、whitespaces
        str=str.trim();
        //3、-/+ sign
        int i=0;
        boolean positive=true;
        if(str.charAt(0)=='+')
            i++;
        else if(str.charAt(0)=='-'){
            i++;
            positive=false;
        }
        //4、calculate real value
        double tmp=0;//如果是int类型的,当输入时2147483648时,计算会越界
        for(;i<str.length();i++){
            int digit=str.charAt(i)-'0';
            if(digit<0||digit>9){
                break;
            }
            //5、handle min & max
            if(positive){
                tmp=10*tmp+digit;
                if(tmp>Integer.MAX_VALUE)
                    return Integer.MAX_VALUE;
            }else{
                tmp=10*tmp-digit;
                if(tmp<Integer.MIN_VALUE)
                    return Integer.MIN_VALUE;
            }
        }
        int res=(int)tmp;
        return res;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值