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; } }