简单 | 二分法 |
一. 题目描述
给定一个 正整数**num**
,编写一个函数,如果**num**
是一个完全平方数,则返回 **true**
,否则返回**false**
。
进阶:不要 使用任何内置的库函数,如 **sqrt**
。
二. 题目示例
:::tips
输入:num = 16
输出:true
:::
:::tips
输入:num = 14
输出:false
:::
三. 题目解答
1. 思路
数字从0到num有序,进行二分查找。为了防止乘法溢出,用**mid与num/mid**
代替**mid*mid与num**
作比较。
2. 代码
/**
* @param {number} num
* @return {boolean}
*/
var isPerfectSquare = function(num) {
let left=0, right=num,mid=0;
while(left <= right){
mid = Math.floor(left + (right-left)/2);
if(mid == num/mid){
return true;
} else if (mid > num/mid){
right = mid-1;
} else {
left = mid+1;
}
}
return false;
};