# [367] 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
不使用 sqrt 库函数,最简单的思路就是从 1 * 1, 2 * 2 开始不断累加,直到等于或大于目标数。此时返回true或false即可。这样的时间复杂度为O(N)。
如果要优化效率的话,显然就只有二分查找了。对于大于1的目标数,通过不断二分,逼近平方根即可。时间复杂度为O(logN)。
function isPerfectSquare(num: number): boolean {
if (num === 1) return true;
let left = 0,
right = num;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (mid> mid > num) {
right = mid - 1;
} else if (mid> mid < num) {
left = mid + 1;
} else {
return true;
}
}
return false;
}