题目描述
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
注意:
本题中的空白字符只包括空格字符 ‘ ‘ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
样例
输入:s = " -42"
输出:-42
解释:
第 1 步:" -42"(读入前导空格,但忽视掉)
第 2 步:" -42"(读入 '-' 字符,所以结果应该是负数)
第 3 步:" -42"(读入 "42")
解析得到整数 -42 。
算法1
(模拟) $O(n)$
C++ 代码
class Solution {
public:
int myAtoi(string s) {
int k = 0;
while(k < s.size() && s[k] == ' ') k ++; //去除前导零
if(k == s.size()) return 0; //特判边界
int res = 0;
int minus = 1;
if(s[k] == '-')minus = -1, k ++;
else if(s[k] == '+') k++;
//用while循环的好处是可以不用处理很多边界情况例如 “work 123”这样的结果就是0,这样的话较为方便
//也解决了小数点的问题
while(k < s.size() && s[k] >= '0' && s[k] <= '9'){
int t = s[k] - '0';
t *=minus;
if(minus == -1 && (res < (INT_MIN - t) / 10))return INT_MIN;
if(minus == 1 && res > (INT_MAX - t) / 10)return INT_MAX;
res = res * 10 + t;
k ++;
}
return res;
}
};