前言
好久没更新了,今天是开学的第一天,这学期选了门算法的课,打算好好刷下《算法导论》这本书,可能接下来会一边分享leetcode的刷题贴,一边分享自己在书上所学的一些算法。欢迎你一起和我学习坚持下去
题目描述
实现 atoi,将字符串转为整数。
在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。
当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。
若函数不能执行有效的转换,返回 0。
说明:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
示例 2:
示例 3:
输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
示例 5:
解题
说真,有时候遇到这道题目描述很长的题,真的有点不想去看它,读个题意都花了好久,不过这也间接说明了自己刷的题实在是少。偷偷透露一下,有时候都不知道题目要我们干什么…..
刚开始的时候,以为像”0003333aaa”这样的字符串也返回0,提交的时候,根据系统的判断,前面的0也要像空格一样被忽略去掉。
对于这道题,我的想法很简单也很暴力,就是根据题目给的那些条件与限制,一条一条着去判断,虽然这道题不难,但觉得细节是真的挺多的,提交了好几次错误。
就是按照题目说的:
先去掉空格
判断正负数
用一个long的变量来保存目标整数,主要是为了方便判断该整数有没有越界。
直接上代码吧:
本来我是把num放到最后来判断正负数,有没有超出最大整数,但发现题目给出的整数,连long类型也存不下,所以就只能一遍处理一边判断了。
下面是我把这些代码处理了一下,感觉看起来简洁点,也放出来给大家参考,同时欢迎大家能给出更见简洁的代码。
完
点赞与转发是最大的支持
领取专属 10元无门槛券
私享最新 技术干货