【LeetCode】8. 字符串转换为整数(Atoi) 题解 【LeetCode】8. 字符串转换为整数Atoi 题解Link: https://leetcode.cn/problems/string-to-integer-atoi/description/实现一个MyAtoi(string s)函数使其能将字符串转换成一个32 3232位有符号整数。函数MyAtoi(string s)的算法如下空格读入字符串并丢弃无用的前导空格 符号检查下一个字符假设还未到字符末尾为-还是。如果两者都不存在则假定结果为正。转换通过跳过前置零来读取该整数直到遇到非数字字符或到达字符串的结尾。如果没有读取数字则结果为0 00。舍入如果整数数超过32 3232位有符号整数范围[ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1][−231,231−1]需要截断这个整数使其保持在这个范围内。具体来说小于− 2 31 -2^{31}−231的整数应该被舍入为− 2 31 -2^{31}−231大于2 31 − 1 2^{31}-1231−1的整数应该被舍入为2 31 − 1 2^{31}-1231−1。返回整数作为最终结果。输入输出样例输入样例 #1s 42 s \texttt{42}s42输出样例 #142 4242输入样例 #1s -042 s \texttt{ -042}s-042输出样例 #1− 42 -42−42输入样例 #3s 1337c0d3 s \texttt{1337c0d3}s1337c0d3输出样例 #31337 13371337输入样例 #4s 0-1 s \texttt{0-1}s0-1输出样例 #40 00输入样例 #5s words and 987 s \texttt{words and 987}swords and 987输出样例 #50 00数据规模与约定0 ≤ ∣ s ∣ ≤ 200 0\le |s|\le 2000≤∣s∣≤200s ss中只包含数字、加减符号、字母、小数点和空格。SolutionLink: https://leetcode.cn/problems/string-to-integer-atoi/solutions/3973263/8-zi-fu-chuan-zhuan-huan-zheng-shu-ti-ji-tvle/1. 题意自行实现一个atoi函数实现字符串提取出开头的可被转化为数值的最长子串转化为数值并截断到Int32的范围。2. 分析比较基础的模拟题直接按照题目要求模拟就可以了。主要提一下代码实现层面需要注意的一些坑点字符串遍历可能出现越界建议是末尾加一个非数字字符充当边界判断开头的减号加号那里必须是if和else if如果两个判断都是用的if则会被-12这个测试样例卡掉纯数字部分是有可能会超过Int64的最大范围的如果中途就发现已经超过了Int32的范围提前截断返回即可注意这个截断的逻辑是饱和而非强制类型转化。时间复杂度是O ( ∣ s ∣ ) O(|s|)O(∣s∣)空间复杂度是O ( 1 ) O(1)O(1)。3. 代码publicclassSolution{publicintMyAtoi(strings){s*;intpos0,flag1;longabs0,result0;while(s[pos] ){pos;}if(s[pos]-){flag-1;pos;}elseif(s[pos]){flag1;pos;}while(char.IsDigit(s[pos])){absabs*10s[pos]-0;resultabs*flag;if(result-2147483648){return-2147483648;}if(result2147483647){return2147483647;}pos;}return(int)result;}}4. 轶事本题要求从一个字符串里提取出可被转化为数值的前缀这个从前往后遍历每个字符的流程是绝大多数算法竞赛中处理字符串输入的标准方法。此外这个逐字符扫描的流程也是《编译原理》中语法分析器分析代码结构的流程具体可以参考这篇文章 https://blog.csdn.net/weixin_52027970/article/details/161113011?spm1001.2014.3001.5502