Leetcode–7. 字符串转换整数 (atoi) [2020.9.9]
前言
这题难度不大,主要是细节的处理。主要的思路是总结出几种情况的判定:
- 数字后一位只有为数字才能继续,否则判断是否溢出,输出
- 加号减号后一位只有为数字才能继续,否则输出0
- 遇到空格直接 c o n t i n u e ; continue; continue;
- 非数字、非加减号,非空,输出0
注意以上四种情况的判定顺序,还有注意数据溢出以及正负的处理。
题目
代码
/*代码可能有点冗余,有能力能够自己简化*/
class Solution {
public:
int myAtoi(string str) {
long len = str.length();
long res=0;
int flag = 1; // 正负号
for(int i=0; i<len; i++){
// 数字判定
if('0'<=str[i]&&str[i]<='9'){
// 后一位为数字
if('0'<=str[i+1]&&str[i+1]<='9'){
res = 10*res+int(str[i]-'0');
//溢出判定
if(flag*res<-1*pow(2,31))
return -pow(2,31);
if(flag*res>pow(2,31)-1)
return pow(2,31)-1;
}
// 后一位非输出,终止
else{
res = 10*res+int(str[i]-'0');
if(flag*res<-1*pow(2,31))
return -pow(2,31);
if(flag*res>pow(2,31)-1)
return pow(2,31)-1;
break;
}
}
// 正负号判定
else if(str[i]=='+'||str[i]=='-'){
if('0'<=str[i+1]&&str[i+1]<='9'){
if(str[i]=='-')
flag = -flag;
continue;
}
else
break;
}
// 空格判定
else if(str[i]==' ')
continue;
else
break;
}
res = res*flag;
return res;
}
};
附录
- 判定的顺序很重要
- 也可以从正则的角度去思考这个问题