首页 > 其他 > 详细

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

时间:2021-07-03 11:00:48      阅读:25      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

我的题解表现:

技术分享图片

 

 

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))

原文:https://www.cnblogs.com/lesten/p/LeetCodeT7.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!