zoukankan      html  css  js  c++  java
  • 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;
                }
            }
        }
    };
  • 相关阅读:
    PHP 实现 一致性哈希 算法(转的)
    一致性 hash 算法
    分布式设计与开发---宏观概述
    Lvs+keepalived+nginx+php的session 保持的算法
    从零搭建Web网站
    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
    哪个线程执行 CompletableFuture’s tasks 和 callbacks?
    HTTP 用户认证
    java 发送 HTTP 请求
    Http basic Auth 认证方式帮助类
  • 原文地址:https://www.cnblogs.com/lesten/p/LeetCodeT7.html
Copyright © 2011-2022 走看看