Leetcode之二分法专题-367. 有效的完全平方数(Valid Perfect Square)

Leetcode之二分法专题-367. 有效的完全平方数(Valid Perfect Square)


给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明:不要使用任何内置的库函数,如  sqrt

示例 1:

输入:16
输出:True

示例 2:

输入:14
输出:False


不能用sqrt,判断一个数是否是一个完全平方数。

1、可以用for循环,但时间复杂度高
2、用二分法,思路如下:
  • 从0-N,取中点
  • 看中点的平方是否大于num
  • 如果中点的平方小于num,需要找更大的数字,所以取右边,不需要保留这个数字,L = mid+1
  • 如果大于或者等于,取左边,这个数字可能是也可能不是,需要保留这个数字,R = mid
class Solution {
    public boolean isPerfectSquare(int num) {
        if(num==0) return true;
        
        int L = 1;
        int R = num;
        while(L<R){
            int mid = (L+R)>>>1;
            if(Math.pow(mid, 2)>=num){
                R = mid;
            }else{
                L = mid+1;
            }
        }
        if(L*L==num){
            return true;
        }
        return false;
    }
}

猜你喜欢

转载自www.cnblogs.com/qinyuguan/p/11415939.html