您的位置:首页 > 其它

leetcode之路008 String to Integer (atoi)

2015-07-26 21:02 197 查看
题目大意:实现atoi的功能,把一个字符串转化为整数。

首先的考虑所有的情况,有以下:

1、字符串为空,返回0;

2、字符串中含有‘ ’空格字符,则需要跳过所有空格;

3、考虑符号问题,‘-’和‘+’,最开始自己就没想到‘+’也要考虑;

4、然后必须为数字0-9,如果不为数字,则返回前面已经确定的值。例:“-123a87”,返回的是-123,而不是直接返回错误的值,这这也是最开始完全没想到的,以为直接返回0即可。

5、超出范围问题,超过INT_MAX则返回INT_MAX,小于INT_MIN则返回INT_MIN。刚开始想到要考虑此问题,但以为是返回0,因为也出错。

看似简单的一个题,需要考虑的情况太多,很容易出错,这也是此题ac率只有12%的原因,但题目不说清楚各种情况的返回值值得吐槽。

下面是ac的代码,时间12ms:

class Solution {
public:
int myAtoi(string str) {
int flag=0;
long long resu=0;
int j=0;
if(str.length()==0)
return 0;
while(str[j]==' ')++j;
str=str.substr(j,str.length()-j);
if(str[0]=='-')
{
flag=1;
str=str.substr(1,str.length()-1);
}
else if(str[0]=='+')
str=str.substr(1,str.length()-1);
for(int i=0;i<str.length();++i)
{

if(str[i]>='0'&&str[i]<='9'&&resu<INT_MAX)
resu=10*resu+(str[i]-'0');
else
break;
}
if(flag)resu=flag?-resu:resu;
if(resu>INT_MAX)resu=INT_MAX;
else if(resu<INT_MIN)resu=INT_MIN;
return resu;
}
};


讨论区更简单的实现代码如下:

int myAtoi(string str) {
long result = 0;
int indicator = 1;
for(int i = 0; i<str.size();)
{
i = str.find_first_not_of(' ');
if(str[i] == '-' || str[i] == '+')
indicator = (str[i++] == '-')? -1 : 1;
while('0'<= str[i] && str[i] <= '9')
{
result = result*10 + (str[i++]-'0');
if(result*indicator >= INT_MAX) return INT_MAX;
if(result*indicator <= INT_MIN) return INT_MIN;
}
return result*indicator;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: