题目描述
![]()
分析
- result = 0,为截至目前转换了的数
- current,这一位的数(str[i])
- 忽略字符串开头的" "
- 判断" "后第一个字符,不为'+', '-', '0'~'9'则直接return 0,为'-'将sgn置为-1。
- result = result * 10 + sgn * current,直到没有数字
- 在每次进行第3步前判断是否会溢出
- 正溢出: (result == 214748364 && current > 7) || result > 214748364
- 负溢出: (result == -214748364 && current > 8) || result < -214748364
代码
class Solution {
public:
int myAtoi(string str) {
int result = 0, current, i, sgn = 1;
for(i = 0;i < str.length(); i++){
if(str[i] != ' ')
break;
}
if(i == str.length()){
return 0;
}
if(str[i] == '-'){
sgn = -1;
i++;
}else if(str[i] == '+'){
i++;
}else if((str[i] != '-' && str[i] != '+')&& (str[i] > '9' || str[i] < '0')){
return 0;
}
for(; i < str.length(); i++){
if(str[i] > '9' || str[i] < '0'){
break;
}
current = str[i] - '0';
if((result == 214748364 && current > 7)||result > 214748364)
return 2147483647;
if((result == -214748364 && current > 8)||result < -214748364)
return -2147483648;
result = 10 * result + sgn * current;
}
return result;
}
};
执行结果
![]()