1. 题目描述

实现 int sqrt(int x) 函数。

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

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

示例 1:

  1. 输入: 4
  2. 输出: 2

示例 2:

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

2. 解题思路

这里可以使用二分法来解决这个问题。我们知道,所有数字的平方根肯定比它一半是小的,所以我们可以直接将right设置为x / 2 这里我们使用使用>>1来求一个数的一半或者两个数的平均值,他会比Math的方法快很多。不断缩小left和right之间的范围,直至找到平方根。

3. 代码实现

  1. /**
  2. * @param {number} x
  3. * @return {number}
  4. */
  5. var mySqrt = function(x) {
  6. if(x < 2) return x
  7. let left = 1 , right = x >>1, mid
  8. while(left <= right){
  9. mid = (left + right) >>1
  10. if(mid * mid === x){
  11. return mid
  12. }
  13. mid * mid < x ? left = mid + 1 : right = mid - 1
  14. }
  15. return right
  16. };

4. 提交结果

69. x的平方根 - 图1