一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 537|回复: 4
收起左侧

[算法题] leetcode 8.String to Integer(atoi)

[复制链接] |试试Instant~ |关注本帖
史蒂芬谢 发表于 2016-8-5 18:46:26 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
想请教大家一个问题,我在做leetcode 8题 String to Integer(atoi)的时候(将字符串转换为整数),对几行代码不太理解,希望大家帮忙看下,谢谢!
//4. Convert number and avoid overflow
    while(index < str.length()){
        int digit = str.charAt(index) - '0';//问题1.str.charAt(index)是得到str对象指定位置的字符,为什么要减‘0’呢?减‘0’是什么意思呢?比如如果该位置上的字符是‘9’,那么减'0'有什么用呢?如果该位置上的字符是'0', 那么减'0'岂不是什么都没有了?

        if(digit < 0 || digit > 9) break;//问题2.如果找到的字符是负数或者是大于9的数,为什么就要终止循环呢?
//check if total will be overflow after 10 times and add digit
        if(Integer.MAX_VALUE/10 < total || Integer.MAX_VALUE/10 == total && Integer.MAX_VALUE %10 < digit)
            return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;

        total = 10 * total + digit;
        index ++;
    }

谢谢大家!
走一走看一看 发表于 2016-8-5 20:30:00 | 显示全部楼层
问题1: charAt拿到的是index指向的char数字,你要转换为int型数字,所以要根据ascii码相减。问题二:因为是每一位上的数字,所以一定在1到9。
回复 支持 1 反对 0

使用道具 举报

 楼主| 史蒂芬谢 发表于 2016-8-6 09:51:19 | 显示全部楼层
走一走看一看 发表于 2016-8-5 20:30
问题1: charAt拿到的是index指向的char数字,你要转换为int型数字,所以要根据ascii码相减。问题二:因为是 ...

谢谢你哈,我明白了!但我还有一个疑问就是,我知道int 范围是-2^31~2^31-1,但为什么这里处理整数越界的条件是(Integer.MAX_VALUE/10<total||Integer.MAX_VALUE/10==total&&Integer.MAX_VALUE%10<digit),为什么要拿数据与Integer.MAX_VALUE/10相比较呢?为什么不直接与Integer.MAX_VALUE相比较?
谢谢大神!
回复 支持 反对

使用道具 举报

走一走看一看 发表于 2016-8-6 15:47:49 | 显示全部楼层
你可以直接比较,但是这个时候和max_value比较的数字total应该为long型。如果你string表述的数字已经大于int型的最大值,当他加到某一位,会溢出。代码里的方法是另一种判断方法,倘若total >max_value/10,并且你的total还是int型,那你下一步10*total不就溢出了吗?后面的限制条件是说,total == max_value / 10时,那么比较最后一个数字跟max_value % 10的大小。我不是大神哈~~
回复 支持 反对

使用道具 举报

 楼主| 史蒂芬谢 发表于 2016-8-8 16:19:25 | 显示全部楼层
走一走看一看 发表于 2016-8-6 15:47
你可以直接比较,但是这个时候和max_value比较的数字total应该为long型。如果你string表述的数字已经大于in ...

我懂了!谢谢你!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 19:15

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表