-
题目
将字符串转为整数,超过范围的数用边界值代替。 -
思路[力扣官方视频(复杂度最低)]
第一步 处理前导空格(跳过)
第二步 处理负号(用于判断正负)
第三步 处理正负号(跳过)
第四步 处理数字部分(非数字部分结束处理)
res = res*10+r
注意越界问题:res>INT_MAX/10 || (res==INT_MAX/10&&r>7) -
代码
int myAtoi(string str) {
int res = 0;
int i = 0;
int flag = 1;
while(str[i] == ' ') { // 处理空格
i++;
}
if(str[i] == '-') { // 处理负号
flag = -1;
}
if(str[i]=='-' || str[i]=='+') { // 处理符号
i++;
}
while(i<str.size() && isdigit(str[i])) {
int r = str[i] - '0';
if(res>INT_MAX/10 || (res==INT_MAX/10&&r>7)) {
return flag>0? INT_MAX: INT_MIN;
}
res = res*10+r;
i++;
}
return flag>0? res: -res;
}