LeetCode 每日一题 (字符串转换整数 (atoi))

LeetCode 每日一题 (字符串转换整数 (atoi))

 

我的题解表现:

LeetCode 每日一题 (字符串转换整数 (atoi))

 

 

class Solution {
public:
    int myAtoi(string s) {
        int ret = 0;
        if (s.size() == 0){
            return ret;
        }

        const char*p = s.c_str();
        int i = 0;
        
        while(p[i] ==' ') i++;

        bool big0 = true;
        if ((p[i] != '+') && (p[i] != '-')){
            if (!(p[i] >= '0') && (p[i] <= '9')){
                return ret;
            }
        }else{
            if (p[i] == '-'){
                big0 = false;
            }
            i++;
            if (!(p[i] >= '0') && (p[i] <= '9')){
                return ret;
            }
        }

        char a[11] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};  // 大于10位就不用看了
        int j = 0;
        while((p[i] >= '0') && (p[i] <= '9')){
            if (j == 11){
                break;
            }

            if (p[i] > '0') {
                a[j] = p[i] - '0';                
                j++;
            }else{
                if (j == 0){
                }else{
                    a[j] = 0;
                    j++;
                }
            }
            i++;
        }

        if (a[9] == -1){  // 9 位  一定没有越界
            for(int k = 0;k<9;k++){
                if (a[k]>=0){
                    ret = ret * 10 + a[k];
                }else{
                    break;
                }   
            }
            if (!big0){
                ret = 0 - ret;
            }
            return ret;
        }

        if (a[10] == -1) {  // 10位   可能越界了
            if (big0){
                int b[10] = {2,1,4,7,4,8,3,6,4,7};
                for(int k=0;k<10;k++){
                    if (a[k] == b[k]){                        
                    }else if (a[k] > b[k]){ // 越界了  a[k]待验证数组 首先出现大的情况 
                        return 2147483647; 
                    }else{
                        for(int l=0;l<10;l++){
                            ret = ret * 10 + a[l];
                        }
                        return ret;                        
                    }                    
                }
                return 2147483647;                     
            }else{  // 可能是 9 或者10
                int b[10] = {2,1,4,7,4,8,3,6,4,8};
                for(int k=0;k<10;k++){
                    if (a[k] == b[k]){ 
                    }else if (a[k] > b[k]){  // 越界了          
                        return -2147483648;
                    }else if (a[k] < b[k]){
                        for(int l=0;l<10;l++){                          
                            ret = ret * 10 + a[l];
                        }
                        return 0 - ret;                             
                    }
                }
                return -2147483648;
            }           
        }else{  // 一定 越界了
            if (big0){
                return 2147483647;
            }else{
                return -2147483648;
            }
        }
    }
};

 

上一篇:[数学] leetcode 8 String to Integer (atoi)


下一篇:Python pandas.DataFrame.aggregate函数方法的使用