• 8-字符串转换整数


     

     

     方法:

    这题的做法大概是这样:

    1. 去掉前导空格
    2. 再是处理正负号
    3. 识别数字,注意越界情况。

    这道题目如果只是简单地字符串转整数的话,就是简单地rev=rev*10+pop。 但是注意这道题目可能会超过integer的最大表示! 也就是说会在某一步(1)rev*10+pop> Integer.MAX_VALUE。或者(2)rev*10+pop< Integer.MIN_VALUE。

    (1)假如是第一个情况。要么rev>Integer.MAX_VALUE/10,此时rev*10之后必然越界。要么rev==Integer.MAX_VALUE/10&&pop>7,因为int类型最大值2147483647,个位就是7。Integer.MAX_VALUE/10*10之后是2147483640,比int最大值小7,如果pop<=7还是不过界的。

    (2)第二个情况,int最小值:-2147483648,个位数是8,和上面一样。。。。

    class Solution {
        public int myAtoi(String str) {
            int rev = 0;
            char[] charList = str.toCharArray();
            int length = str.length();
            int zf = 1;//正负号
            int i = 0;//到了str的哪一位
            int pop = 0;//当前这一位的数
            for(;i<str.length();i++)//此循环查找第一个非空字符串的位置
            {
                if(charList[i]==' ') continue;
                else
                {
                      if(charList[i] == '-'){
                        i++;
                        zf = -1;
                        break;
                    }
                    if(charList[i] == '+'){
                        i++;
                        break;
                    }
                    if(charList[i] <'0' || charList[i] >'9'){//不是数字
                        return 0;
                    }else{
                        break;
                    }
                }
            }
            if(i==str.length()) return 0;//全都是空格,返回0.不用减一,如果上方循环一直continue,i会等于str.length()
            for(;i<str.length();i++)
            {
                if(charList[i]<'0'||charList[i]>'9')return rev;//不是数字,则终止循环,返回rev
                pop=(charList[i]-48)*zf;//字符转换为整数,减去48
                 if(rev>Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)){//最大值个位数是7,最小值个位数8,rev == Integer.MAX_VALUE/10时,rev乘以十之后,加上8就会越界。。。
                    return Integer.MAX_VALUE;
                }
                if(rev<Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)){
                    return Integer.MIN_VALUE;
                }
                rev=rev*10+pop;
    
    
    
    
            }
            return rev;
        }
    }
    /*1.开头空格,丢弃
    2.开头正负号,记下来,
    开头不是数字,返回0
    开头是数字,开始计数(题目其实是找出前几位构成的整数)*/
    

      

  • 相关阅读:
    Alpha、Beta、RC、GA版本的区别
    convertView
    Layouts
    Styles and Themes
    Android Studio
    Promise.race
    Base64
    NodeJS搭建HTTPS服务器
    CoreSeek
    Ping of Death
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12743369.html
Copyright © 2020-2023  润新知