8. 字符串转整数(实现atoi函数) [leetcode 8: String to Integer (atoi)]

9 篇文章 0 订阅
8 篇文章 0 订阅

8. 字符串转整数(实现atoi函数) [leetcode 8: String to Integer (atoi)]

原题链接

https://leetcode.com/problems/string-to-integer-atoi

老王的解法链接

https://github.com/simplemain/leetcode/blob/master/8/analysis.md

难度

★★★☆☆

标签

状态机 / 数字计算 / 编译原理

题目描述

实现一个字符串转整型的atoi函数. 要求如下:

  • 去掉前导空白符, 直到遇到一个非空白符;
  • 接下来, 可能是一个+或者-;
  • 紧接着, 是一堆数字;
  • 后面可能还有一堆非数字的字符, 这些东西可以忽略;

如果以下情况, 请返回0:

  • 前导的非空白符不是数字;
  • 或者, 是空串
  • 或者, 是空白符串

注意:

  • 空白符只有空格' '
  • 假定, 我们的系统只能处理32位有符号整数, 如果超过[−231, 231 − 1]这个范围, 就返回INT_MAX (231 − 1) 或 INT_MIN (−231)

输入样例

第一组: "42"
第二组: "   -42"
第三组: "4193 with words"
第四组: "words and 987"
第五组: "-91283472332"

输出样例

第一组: 42
第二组: -42
第三组: 4193
第四组: 0
第五组: -2147483648

解法分析


  • 解法1 : 状态机

这个题拿到的第一感觉就是: 题!好!长!

题目说了n多要求, 实际上简化一下就是: 把一个有前导空格的字符串的前面整数部分提取出来.

这种题目最直接的做法, 就是利用状态机进行字符提取.

我们可以画出以下状态机:

在这里插入图片描述

只要状态机画出来了, 对应代码就很好写了.

这里另外有一个点, 就是32位整数的问题. 这个题在之前的第7题已经处理过了, 老王就不再单独说明了.

完整代码请点击这里: 完整代码


扩展知识

其实这个题可以看成编译原理里面最简单的词法分析. 里面就用到了状态机. 大家有兴趣的话, 可以再去读读编译原理的书.


好了, 这一题就分析到这里. 如果觉得老王的讲解有意思或有帮助, 可以给老王点个赞或者打个赏啥的, 老王就很开心啦~

咱下一题继续~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值