700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > leetcode 8. 字符串转换整数 (atoi)

leetcode 8. 字符串转换整数 (atoi)

时间:2021-08-18 16:13:00

相关推荐

leetcode 8. 字符串转换整数 (atoi)

难度:中等

频次:75

题目:

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格

检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。

读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。

将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。

如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。

返回整数作为最终结果。

注意:

本题中的空白字符只包括空格字符 ’ ’ 。

除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

解题思路:按提示遍历

首先丢弃无用前导空格[题目的提示]可能会有string都是空格的情况,需要排除 接着读取符号位字符[题目的提示]有符号位的时候需要进行的处理,标志位+1 -1没有±号的时候不用处理,标志位起始值就为1 读取数字[题目的提示]用一个while判断i和n的大小即可如果不是数字,直接退出那么剩下的情况就是数字 预判这轮加上后是是否大于Integer的取值,这一步不能简单用res>Integer.MAX_VALUE,因为res如果超过最大值,就会变成复数了。这是这道题的精髓,不让用double,不然就可以直接比较。 预判结果超出界限(拿最大值举例子2147483647)只有两种情况 1.当之前的res>214748364,接下来的那一位无论是哪个数字,都会超出界限2.当之前的res==214748364,接下来的那以为必须要大于7时才会超出界限【这里负数不一样,-2147483648,最后一位必须大于8】

代码

class Solution {public int myAtoi(String s) {//当前下标int i=0;int res=0;int n=s.length();char[] charArray=s.toCharArray();//1.丢弃无用的前导空格while(i<n && charArray[i]==' '){i++;}//======需要排除全部都是' '的情况//下标=n说明char数组已经遍历完了,那就没有了if(i==n) return 0;//2.检查该字符是+号还是-号int sign=1;//==有效位数if(charArray[i]=='-'){sign=-1;i++;}else if(charArray[i]=='+'){i++;}//判断是否跳出循环while(i<n){if(charArray[i]>'9'||charArray[i]<'0') break;int max=Integer.MAX_VALUE;int min=Integer.MIN_VALUE;//3.预判是否在范围内//因为在int的大小有限,Integer.MAX_VALUE+1就会变成Integer.MIN_VALUE//所以得预判,即超过max=2147483647的有两种情况//第一种:之前的res比 214748364(max/10)要大,那无论一下位是什么都会超出界限//第二种:之前的res刚好跟214748364(max/10)相等,那下一位只有超过7才会超出界限if (res > max / 10 || (res == max / 10 && (charArray[i]-'0') > max % 10)) {return max;}if (res < min / 10 || (res == min / 10 && (charArray[i]- '0') > -(min % 10))) {return min;}//负号要每一次都×尾数res=10*res+sign*(charArray[i]-'0');i++;}return res;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。