<p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;">implement <span style="box-sizing: border-box; font-family: monospace;">atoi</span> to convert a string to an integer.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;"><span style="box-sizing: border-box; font-weight: 700;">Hint:</span> Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;"><span style="box-sizing: border-box; font-weight: 700;">Notes:</span> It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.</p>
<p>分析:需要考虑多种情况:</p><p><span style="white-space: pre;"> </span>1、开头有空格,跳过,直到遇到+、-或者数字</p><p><span style="white-space: pre;"> </span>2、第一位为正负号的,决定最终数值的正负</p><p><span style="white-space: pre;"> </span>3、从第二位开始,如果遇到非数字,跳出。</p><p><span style="white-space: pre;"> </span>4、遇到数字,直接转换</p><span style="white-space:pre"> </span>5、溢出问题
class Solution {
public:
int myAtoi(string str) {
int i=0;
int result=0;
while(str[i]==' ')
i++;
int sign=1;
if (str[i]=='-')
{
sign=-1;i++;
}
else if (str[i]=='+')
{
sign=1;i++;
}
while (i<str.length())
{
if (str[i]<'0'||str[i]>'9')
{
break;
}
else
{
int pre_result=result;
result=result*10+str[i]-'0';
i++;
if(result/10!=pre_result)
return sign==1?INT_MAX:-INT_MIN;
}
}
return sign==1?result:-result;
}
};
遇到的问题:
1、数字转换时,注意 result=result*10+str[i]-'0'; 这种方法稍微简单一点。
2、如果溢出,则该次的计算会出现跳变,通过检测新结果除以10的商与上一次的结果是不是相等,来判断是否出现了溢出。
分析:需要考虑多种情况:
1、开头有空格,跳过,直到遇到+、-或者数字
2、第一位为正负号的,决定最终数值的正负
3、从第二位开始,如果遇到非数字,跳出。
4、遇到数字,直接转换