问题
RT, 实现atoi
算法:遍历解析
这道题给出了算法步骤:
1. 丢弃空格
2. 判断正负
3. 数字解析
4. 边界截断
但是很多时候笔面试题可能都不会给出确切的算法步骤,需要自己想。
所以对这种题目,还是得理解记忆一下上述四个内部实现的步骤。
时间复杂度
$O(N)$
代码
class Solution {
public:
int myAtoi(string s) {
int i = 0;
// 去空格
while(i < s.size() && s[i] == ' ') i ++;
// 判正负
bool neg;
if(s[i] == '-'){
neg = true;
i ++;
}
else if(s[i] == '+'){
neg = false;
i ++;
}else{
neg = false;
}
// 数字解析
long long num = 0;
while(i < s.size() && s[i]-'0' >=0 && s[i]-'0'<=9){
int t = s[i++] - '0';
num = num*10 + t;
// 截断
if(num > INT_MAX) return neg?INT_MIN:INT_MAX;
}
return (int)neg?0-num:num;
}
};