简单 | 二分法 |

一. 题目描述

给定一个 正整数**num**,编写一个函数,如果**num**是一个完全平方数,则返回 **true**,否则返回**false**
进阶:不要 使用任何内置的库函数,如 **sqrt**

二. 题目示例

:::tips 输入:num = 16
输出:true
::: :::tips 输入:num = 14
输出:false
:::

三. 题目解答

1. 思路

数字从0到num有序,进行二分查找。为了防止乘法溢出,用**mid与num/mid**代替**mid*mid与num**作比较。

2. 代码

  1. /**
  2. * @param {number} num
  3. * @return {boolean}
  4. */
  5. var isPerfectSquare = function(num) {
  6. let left=0, right=num,mid=0;
  7. while(left <= right){
  8. mid = Math.floor(left + (right-left)/2);
  9. if(mid == num/mid){
  10. return true;
  11. } else if (mid > num/mid){
  12. right = mid-1;
  13. } else {
  14. left = mid+1;
  15. }
  16. }
  17. return false;
  18. };