class Solution {
public:
int myAtoi(string s) {
int ans = 0;
int i =0;
//标记正负号
int flag = 1;
// 删除空格
while(s[i]==' '){i++;}
// 判断正负号,再跳过正负号
if(s[i] =='-') {flag = -1;}
if(s[i] == '+'||s[i]=='-') {i++;}
// 判断是不是数字
while(i<s.size() && isdigit(s[i])){
//由于s[i]返回了一个char,转换成int类型
//(在ASCII编码中,数字字符的表示是连续的,即字符 ‘0’ 对应的ASCII码值是 48,
//‘1’ 对应的ASCII码值是 49,以此类推。因此,通过将字符 ‘0’ 的ASCII码值 48
//减去当前字符的ASCII码值,得到的结果就是相应的数字值。)
int r = s[i] - '0';
// 判断是不是溢出了,INT_MAX 的值是: 2147483647
if(ans > INT_MAX/10 || (ans == INT_MAX/10 && r>7)){
return flag > 0 ? INT_MAX : INT_MIN;
}
ans = ans*10+r;
i++;
}
return flag>0? ans : -ans;
}
};
时间复杂度O(n)
空间复杂度O(1)