LeetCode第69题:X的平方根

197 阅读1分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

题干

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。

解法:二分查找

我们求某个数的平方跟,它的平方根一定是在这个数的范围内,并且我们的平方根只能向下取整,这就要我们在判断middle时,再加上一层与middle的下一个数比较的结果,如果这个数大于middle而又小于middle+1时,返回middle即可。

代码实现:

执行用时:96 ms, 在所有 JavaScript 提交中击败了85.84%的用户

内存消耗:39.6 MB, 在所有 JavaScript 提交中击败了11.32%的用户

 var mySqrt = function (x) {
    let middle = 0;
    let high = x;
    let low = 1;
    if (x == 0) {
      return 0
    }
    while (low <= high) {
      middle = Math.floor((high + low) / 2);
      if (middle * middle == x || (x > middle * middle && x < (middle + 1) * (middle + 1))) {
        return middle
      } else if (middle * middle > x) {
        high = middle - 1
      } else {
        low = middle + 1
      }
    }
  };