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;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值