LeetCode 8.字符串转换整数

难度:中等。
没啥难度,就想多一点就好了。
考虑不周,导致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;

    }
};

猜你喜欢

转载自blog.csdn.net/almost_afei/article/details/112298120