解题思路

代码
class Solution {
public:
int outofrang(int &num,int plus,int &negative)
{
if(negative>0)
{
if((num>=214748364&&plus>6)||num>214748365)return 2147483647;
else return 0;
}
else
{
if((num>=214748364&&plus>7)||num>214748365)return -2147483648;
else return 0;
}
}
int myAtoi(string str) {
int i=0;
for(;i<str.size();i++)
{
if(str[i]!=' ')break;
}
if(i==str.size())return 0;
int negative=1;
int num=0;
if(isdigit(str[i])){num=str[i]-48;}
else{
switch(str[i])
{
case '+':break;
case '-':negative=-1;break;
default:return 0;
}
}
i++;
for(;i<str.size();i++)
{
if(isdigit(str[i]))
{ if(outofrang(num,str[i]-48,negative)==0)
num=num*10+(str[i]-48);
else return outofrang(num,str[i]-48,negative);
}
else break;
}
return num*negative;
}
};
这道题官方给了一个很不错的状态机解法,这里是小白硬上的题解。分而治之的确很管用,但是一定要小心。
本文深入解析了使用C++实现字符串转整数的方法,通过一个具体的代码示例,详细介绍了如何处理输入字符串,包括忽略前导空格、判断正负号、逐位转换数字字符并处理溢出情况。文章强调了分而治之策略的重要性,同时提醒开发者在实现过程中要特别注意边界条件和溢出处理。

2329

被折叠的 条评论
为什么被折叠?



