8. String to Integer (atoi)

8. String to Integer (atoi) (字符串转整型)

题目

这道题目折磨了我一下午加一晚上,最后还是看了解答才做出来的。坑爹啊!主要一开始太轻视这道题目,没有理清楚思路就动手,结果超多细节没有考虑啊。
这里写图片描述
注释:这道题目是要把一个任意字符串转成合法的整型数字。需要满足以下要求:
1)首先忽略字符串前面的全部空白字符,直到碰到第一个非空白字符才开始转置成整数。
2)如果第一个不是数字字符,或者字符串为空或者只有空白字符等一切不合法的字符串,那么返回0
3)如果产生溢出,也就是如果大于相应的最大值Integer.MAX_VALUE=2147483647(正数)或者小于最小值(负数)Integer.MIN_VALUE=-2147483648。那么返回最大值或者最小值。

解题思路

太久没写了都不记得自己当时是怎么个蠢方法了。直接把看了解答以后自己的理解写下来吧。
1)如果当前字符串为“ ”,空格,且还没有遍历到字符串结尾时,一直讲指针下移即可。
2)当读到第一个非空字符时,如果其为-,则将符号变量保存为-1,否则默认为1。因为正数可以不写符号。继续往下走。
3)如果还没到字符串结尾,开始遍历。如果读到的第一个不是数字字符,直接跳出遍历,返回0。
如果第一个为数字字符,则存储下来(利用与‘0’之间ASCI码的差转为对应的数字),继续往下读取字符。
4)如果当前字符为合法数字字符,那么首先首先判断加上当前字符后整个数字是否已经溢出。这里判断溢出的方法分为两步:
- 判断如果最大值/10(214748364)小于现有结果,那么现有结果*10加上最新的位数以后肯定会溢出。直接返回最大值即可。‘’
-判断如果最大值/10(214748364)=现有结果,一旦最新位数超过最大值%10(7)。那么无论正数还是负数加上最新位数后都会溢出。
其实本质就是前面的高位是否>=214748364,并且最后的低位是否超过7。
负数返回最小值,整数返回最大值。
这里写图片描述

这里注意这个溢出的方法判断!

溢出方法的判断-补充知识点

1、 - 判断如果最大值/10(214748364)小于现有结果,那么现有结果*10加上最新的位数以后肯定会溢出。直接返回最大值即可。‘’
-判断如果最大值/10(214748364)=现有结果,一旦最新位数超过最大值%10(7)。那么无论正数还是负数加上最新位数后都会溢出。

2、判断更新的结果逆运算后是否与原结果相等!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值