[LeetCode] 8. String to Integer (atoi) (medium)

标签: LeetCode
2人阅读 评论(0) 收藏 举报
分类:

Welcome To My Blog

8. String to Integer (atoi) (medium)

8.1.png 8.2.png
从这道题中学到了以下几点
1. 对问题进行分解,比如zigzag可以分解为竖直向下排列和斜向上排列.本题是提取给定字符串中的数字,看要求可以得出合法的输入可能包含四部分,先考虑一般情况再考虑边界情况
+ 一般情况: 空格+正负号+数字+字母
+ 边界情况: 空字符串
+ 解决方案: 遍历整个字符串,依次处理这四部分,如果存在相应的部分则进行对应的操作;如果没有某一部分那就跳过,当然了,没有数字可不行
2. 遍历字符串时,索引经过了不同的部分,i在各个部分中自加,所以得用while循环
3. 字符串是否为空,通过它的长度判断,不是null
4. 细节处理过于冗余
+ 判断数字时,如果碰到了不是数字的字符直接break即可,因为在判断数字的循环中,每次执行到最后都会存下最终的无符号数.我开始没有break,而是分不同的情况return,这样做就多余了
+ 我判断溢出时分正负数判断,处理正负数的时候还出现了小错误.其实最简单的方法就是利用Integer.MAX_VALUE和Integer.MAX_VALUE之间的关系
+ Integer.MAX_VALUE和Integer.MAX_VALUE的符号和个位数不同,其余位完全一样
+ Integer.MAX_VALUE和Integer.MAX_VALUE的个位数只差1(本题没用上)
+ if (num > Integer.MAX_VALUE / 10 || ( num == Integer.MAX_VALUE / 10 && curr > Integer.MAX_VALUE % 10) )
5. 逻辑运算符的运算顺序: 与 大于 或
6. 某个char是否为数字通过字符减法str.charAt(i) - ‘0’的大小判断,差∈[0,9]则是数字

    public int myAtoi(String str) {
        int n = str.length(),i = 0, sign = 1,num = 0;
        //1. 这一部分处理空字符串
        if (n == 0) return 0;

        //2. 这一部分处理空格
        while(i < n && str.charAt(i) == ' ') i++;

        //3. 这一部分处理正负号,没有正负号则sign就是1
        //3.1 如果i++放到判断里面,可能就无法自加了
        //3.2 但是此处不一定需要i++,因为没有i++说明此处不是正负号,是不是数字还需要继续判断
        if(i < n && (str.charAt(i) == '+' || str.charAt(i) == '-')) sign =  str.charAt(i++) == '+'? 1:-1;

        //4. 这一部分处理数字
        while(i < n){
            int curr = str.charAt(i) - '0';
            //4.1 非数字,跳出循环
            if (curr > 9 || curr < 0) break;
            //冗余
            //if ((curr > 9 || curr < 0) && num == 0) return 0;
            //f ((curr > 9 || curr < 0) && num > 0) return num*sign; // 两处返回 num*sign,漏掉了sign     
            //4.2 检查是否溢出       
            //4.2.1 仅使用Integer.MAX_VALUE判断是否溢出,注意Integer.MAX_VALUE和Integer.MIN_VALUE 只有符号和个位数不同,其余位完全一样!
            if (num > Integer.MAX_VALUE / 10 || ( num == Integer.MAX_VALUE / 10 && curr > Integer.MAX_VALUE % 10) )
                return sign == 1? Integer.MAX_VALUE:Integer.MIN_VALUE;

            //超级冗余
            //判断溢出,得在循环里面提前判断,因为溢出就显示不了了
            //Integer.MAX_VALUE , Integer.MIN_VALUE
            //if(num*sign < Integer.MIN_VALUE / 10 ) return Integer.MIN_VALUE;
            // 负数取模是负数!!!!!
            //if((num*sign == Integer.MIN_VALUE / 10 ) && curr*sign < Integer.MIN_VALUE % 10)  return Integer.MIN_VALUE;
            //if(num*sign > Integer.MAX_VALUE / 10) return Integer.MAX_VALUE;
            //if(Integer.MAX_VALUE / 10 == num*sign && curr*sign > Integer.MAX_VALUE % 10 ) return Integer.MAX_VALUE;

            num = num*10 + curr;
            i++;
        }
        return num*sign;
    }
查看评论

LeetCode题解--8. String to Integer (atoi)

题目Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases...
  • gatieme
  • gatieme
  • 2016-04-02 23:10:39
  • 1269

[JAVA]LeetCode8 String to Integer (atoi)

Implement atoi to convert a string to an integer.
  • fumier
  • fumier
  • 2015-04-15 16:09:20
  • 1028

【LeetCode】String to Integer (atoi) 解题报告

这道题在LeetCode OJ上难道属于Easy,但是通过率却比较低,究其原因是需要考虑的情况比较低,很少有人一遍过吧。 【题目】 Implement atoi to convert a stri...
  • ljiabin
  • ljiabin
  • 2014-10-27 16:19:38
  • 12916

Leetcode-8-String to Integer(atoi) C++

Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases...
  • u014056175
  • u014056175
  • 2016-06-27 14:24:44
  • 411

LeetCode 8 String to Integer (atoi) (C,C++,Java,Python)

Problem: Implement atoi to convert a string to an integer. Hint: Carefully consider all poss...
  • runningtortoises
  • runningtortoises
  • 2015-05-07 10:38:53
  • 2236

LeetCode(8)String to Integer (atoi)

题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible ...
  • fly_yr
  • fly_yr
  • 2015-04-27 16:57:18
  • 3850

【LeetCode】LeetCode——第8题:String to Integer (atoi)

【LeetCode】LeetCode——第8题:String to Integer (atoi)
  • hujingshuang
  • hujingshuang
  • 2016-04-19 10:26:12
  • 1200

leetcode 8: String to Integer (myAtoi,C库函数atoi模拟) (剑指offer 面试题49) 解题报告

leetcode 8: String to Integer (myAtoi) (剑指offer 面试题49) 解题报告 8. String to Integer (atoi) 提交网址...
  • yanglr2010
  • yanglr2010
  • 2016-05-03 10:13:27
  • 1398

[LeetCode]8. String to Integer (atoi)

【题目】 Implement atoi to convert a string to an integer. Hint: Carefully consider all possible inpu...
  • SunnyYoona
  • SunnyYoona
  • 2014-02-05 12:12:49
  • 2113

leetcode-8-String to Integer (atop)字符串转整数

Carefully consider all possible input cases.考虑程序要全面: 边界处理:溢出,最大正整数,最小负整数返回什么有非数字符号,正负号,小数点,会有指数吗?(都没...
  • chenyaxue
  • chenyaxue
  • 2016-03-04 15:02:52
  • 658
    个人资料
    持之以恒
    等级:
    访问量: 1257
    积分: 421
    排名: 12万+
    文章存档