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 每日一题 (字符串转换整数 (atoi))

上一篇:前端基础---clearfix的最终形态


下一篇:心得小结,关于注重加强MCU调试能力的意识