给定一个 正整数 num
,编写一个函数,如果 num
是一个完全平方数,则返回 true
,否则返回 false
。
进阶:不要 使用任何内置的库函数,如 sqrt
。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
方法一:二分查找
若 num < 2,返回 true。
设置左边界为 2,右边界为 num/2。
当 left <= right:
令 x = (left + right) / 2 作为一个猜测,计算 guess_squared = x * x 与 num 做比较:
如果 guess_squared == num,则 num 是一个完全平方数,返回 true。
如果 guess_squared > num ,设置右边界 right = x-1。
否则设置左边界为 left = x+1。
如果在循环体内没有找到,则说明 num 不是完全平方数,返回 false。
public class Solution {
public bool IsPerfectSquare(int num) {
if(num < 2) return true;
long left = 2 , right = num / 2;
while(left <= right){
long mid = left + (right - left) / 2;
long x = mid * mid;
if(x == num) return true;
else if (x > num) right = mid - 1;
else if (x < num) left = mid + 1;
}
return false;
}
}