剑指 offer 67 把字符串转换成整数(越界问题)

1 题目描述

剑指 offer 67 把字符串转换成整数(越界问题)_第1张图片

剑指 offer 67 把字符串转换成整数(越界问题)_第2张图片

 

2 算法思路

思路:

  1. 先去掉首部的空格
  2. 再看遇到的第一个字符
    1. 如果是正负号,那么就设置一个falg = 1代表正号,-1代表负号,0代表无符号
    2. 如果是数字,那么就开始进行计算,res = 0;    res = res * 10 + num;
  3. 处理数字越界的情况,每次进行计算时,先判断res的大小是否越界
    1. 越界的情况分为两个, 边界 = 2147483647
      1. 一个是res * 10的时候就越界了,boundary = 2147483647 / 10 = 214748364
      2. 另一个是res * 10 + num之后越界了,那么num就不能大于7

 

3 代码

class Solution {
    public int strToInt(String str) {
        char[] c = str.trim().toCharArray();
        if(c.length == 0)
            return 0;
        int res = 0;    //存储结果
        int bndry = Integer.MAX_VALUE / 10;  //214748364
        int sign = 1;
        int i = 1;
        //判断符号
        if(c[0] == '-')
            sign = -1;
        else if(c[0] != '+')       //如果不是符号,就从第一位开始
            i = 0;      //确保从数字位开始
        for(int j = i; j < c.length; j++){
            if(c[j] < '0' || c[j] > '9')
                break;
            if(res > bndry || res == bndry && c[j] > '7')   //如果res越界了
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        }
        return sign * res;
    }
}

4 提交结果

剑指 offer 67 把字符串转换成整数(越界问题)_第3张图片

 

你可能感兴趣的:(剑指 offer 67 把字符串转换成整数(越界问题))