难度:中等。
没啥难度,就想多一点就好了。
考虑不周,导致WA了两次,没考虑下列情况:
“000000002322”
“00000-42a1234”
之后又因为其他小错误交了几次,伤心。
正确解法:
class Solution {
public:
int my_pow(int a, int b){
int k = 1;
for(int i = 0; i < b; i ++){
k *=a;
}
return k;
}
int myAtoi(string s) {
int len = s.length();
int a[12];
int sign_num = 1, digit_num = 0;
bool is_num = false;
int result = 0;
for(int i = 0; i < len; i++){
if(!is_num){
if(s[i] != ' ' && s[i] != '-' && s[i] != '+' && (s[i] > '9' || s[i] < '0')){
return 0;
}
else if(s[i] == '-'){
cout << "sign - " << endl;
sign_num = -1;
is_num = true;
}
else if(s[i] == '+'){
is_num = true;
}
else if(s[i] <= '9' && s[i] >= '0'){
if(digit_num == 0 && s[i] == '0'){
is_num = true;
continue;
}
a[digit_num] = s[i] - '0';
digit_num++;
is_num = true;
}
}
else{
if(s[i] <= '9' && s[i] >= '0'){
if(digit_num == 0 && s[i] == '0')continue;
if(digit_num > 10){
if(sign_num == 1)return INT_MAX;
else return INT_MIN;
}
a[digit_num] = s[i] - '0';
digit_num++;
}
else{
break;
}
}
}
if(digit_num > 10 ||(digit_num == 10 && a[0] > 2)){
if(sign_num == 1)return INT_MAX;
else return INT_MIN;
}
for(int i = 0; i < digit_num; i++){
int k = my_pow(10, digit_num - i - 1) * a[i] * sign_num;
if(sign_num == 1){
if(INT_MAX - k < result)return INT_MAX;
}
else{
if(INT_MIN - k > result)return INT_MIN;
}
result += k;
}
return result;
}
};