剑指 Offer 67. 把字符串转换成整数--边界处理

103 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在这里插入图片描述 在这里插入图片描述 根据题目的测试来看,00001 == 1

边界处理非常巧妙,对于大于Integer.MAX_VALUE / 10肯定是越界了,对于相等的,大于7越界(这里将Integer.MIN_VALUE也判定为越界了,但是结果是一致的)

class Solution {
  public int strToInt(String str) {
        char[] arr = str.trim().toCharArray();
        if(arr.length == 0) return 0;
        int i = 0;
        int flag = 1;

        if(arr[0] == '-') {
            flag = -1;
            i++;
        }else if(arr[0] == '+') i++;

        int res = 0, bndry = Integer.MAX_VALUE / 10;
        for(int j = i; j < arr.length; j++) {
            if(arr[j] < '0' || arr[j] > '9') break;
            if(res > bndry || res == bndry && arr[j] > '7') return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (arr[j] - '0');
        }
        return flag * res;
    }
}