简单 | 二分法 |
一. 题目描述
给定一个 正整数**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;};
