Leetcode刷题367有感

题目

Leetcode刷题367有感_第1张图片

方法体

class Solution {
    public boolean isPerfectSquare(int num) {

    }
}

思路

不用内置函数sqrt,判断一个num,是否是完全平方数,只要证明a * a < num,(a+1)*(a+1) > num即可。
如何快速找到a?我想到的第一个方法就是二分法。

代码

    public boolean isPerfectSquare(int num) {
        return er(0, num, num);
    }

    public boolean er(int min, int max, int num) {
        if (min > max) {
            return false;
        }
        int mid = (min + max) / 2;
        int s = mid * mid;
        if (s > num) {
            return er(min, mid - 1, num);
        } else if (s < num) {
            return er(mid + 1, max, num);
        } else {
            return true;
        }
    }

问题

为什么这么小一件事我还要写个文章记录下呢?因为我写完上面的代码,单元测试没问题后,直接提交leetcode,结果错了。原因是int s = mid * mid,这里我居然没有考虑到类型问题。两个int类型的乘积,会有可能大于int类型的最大值。联想到自己的开发生涯,真的很少有去考虑范围溢出问题。

你可能感兴趣的:(java)