• leetcode8 String to Integer (atoi)


    题目需求:

      输入一个字符串,输出对应的int值

    特殊处理:

    输入: null  输出:0

    输入: "a122"  输出:0

    输入: "   1233"  输出:1233

    输入: "  -123"  输出:-123

    输入: "+123"  输出:123

    输入: "  123a233"  输出:123

    输入: "-123 a 34" 输出:-123

    输入: "1232334344556566"  输出:int类型的最大值

    输入: "-123444554558"  输出:int类型的最小值

    思路:

      1、处理正号和负号

      2、处理空格

      3、处理数据的溢出

      4、处理数据中间出现非数字字符

    代码:

        public static int myAtoi(String str){
            if(str == null || str.equals("")){
                return 0;
            }
            char[] chs = str.toCharArray();
            long num = 0;
            boolean flag1 = true;
            int flag = 1;
            for(int i=0; i<chs.length; i++){
                //处理正负符号
                if(flag1 && chs[i] == '+'){
                    flag1 = false;
                    continue;
                }
                if(flag1 && chs[i] == '-'){
                    flag = -1;
                    flag1 = false;
                    continue;
                }
                //处理空格
                if(flag1 && chs[i] == ' '){
                    continue;
                }
                if(!(chs[i] >= '0' && chs[i] <= '9')){
                    //判断是否溢出
                    long num1 = num*flag;
                    if( num1 >= Integer.MAX_VALUE){
                        return Integer.MAX_VALUE;
                    }else{
                        if(num1 <= Integer.MIN_VALUE){
                            return Integer.MIN_VALUE;
                        }else{
                            return (int)num1;
                        }
                    }
                }else{
                    flag1 = false;
                    num = num*10 + chs[i]-'0';
                    long num1 = num*flag;
                    if( num1 >= Integer.MAX_VALUE){
                        return Integer.MAX_VALUE;
                    }else{
                        if(num1 <= Integer.MIN_VALUE){
                            return Integer.MIN_VALUE;
                        }else{
                            continue;
                        }
                    }
                }
            }
            long num1 = num*flag;
            if( num1 >= Integer.MAX_VALUE){
                return Integer.MAX_VALUE;
            }else{
                if(num1 <= Integer.MIN_VALUE){
                    return Integer.MIN_VALUE;
                }else{
                    return (int)num1;
                }
            }
    }

       

  • 相关阅读:
    [POJ 1050]To the Max
    P1678 烦恼的高考志愿
    P1873 砍树
    P1102 A-B 数对
    P6771 [USACO05MAR]Space Elevator 太空电梯
    P2347 砝码称重
    P1832 A+B Problem(再升级)
    P1679 神奇的四次方数
    P1877 [HAOI2012]音量调节
    P1049 装箱问题
  • 原文地址:https://www.cnblogs.com/bywallance/p/5546112.html
Copyright © 2020-2023  润新知