8-字符串转换整数

时间:2020-04-21
本文章向大家介绍8-字符串转换整数,主要包括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
开头是数字,开始计数(题目其实是找出前几位构成的整数)*/

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12743369.html