0608-2020-LEETCODE-把字符串转换成整数(经典处理越界的问题)

自己写的代码,代码最后的异常捕获是看的之前代码,应该是看的之前的题解写的。

public int strToInt(String str) {
        if (str == null || str.length() == 0) return 0;
        str = str.trim();
        if (str.length() == 0) return 0;
        boolean flag = true;
        if (str.charAt(0) == '+' || str.charAt(0) == '-') {
            if (str.charAt(0) == '-') flag = false;
            str = str.substring(1);
            if (str.length() == 0) return 0;
        }
        char[] arr = str.toCharArray();
        if ((arr[0] > '9' || arr[0] < '0')) return 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] <= '9' && arr[i] >= '0') {
                sb.append(arr[i]);
            } else {
                break;
            }
        }
        try {
            int r = Integer.parseInt(sb.toString());
            return r;
        }catch(Exception e){
            return !flag ? Integer.MIN_VALUE : Integer.MAX_VALUE;
        }
    }

以下代码很简洁,巧妙地判断了整数越界的问题。特别是判断 res 是否大于 bndry 那一段是非常巧妙的,如果大于 bndry 那就不用说了,再乘 10 必然大于 最大值,如果 等于 bndry 又同时 大于 7,那么返回的必然也是边界。如果 sign == 1 , 那么直接返回 Integer 的最大值,如果sign == -1,由于是负数,Integer 最小值的边界的最后一位是8,所以最后无论是等于 8 还是大于 8,最后都返回 Intege 的最小值就行。少判断了几次,很巧妙
代码来源:
https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/solution/mian-shi-ti-67-ba-zi-fu-chuan-zhuan-huan-cheng-z-4/

	public int strToInt1(String str) {
        char[] arr = str.trim().toCharArray();
        if (arr.length == 0) return 0;
        int a = 1,res = 0,bndyr = Integer.MAX_VALUE / 10,sign = 1;
        if (arr[0] == '-') sign = -1;
        else if (arr[0] != '+') a = 0;
        for (int i = a; i < arr.length; i++) {
            if (arr[i] < '0' || arr[i] > '9') break;
            if (res > bndyr || (res == bndyr && arr[i] > '7')) res = sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (arr[i] - '0');
        }
        return sign * res;
    }

你可能感兴趣的:(LEETCODE,数据结构)