69. x 的平方根 |刷题打卡

113 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述:

实现 int sqrt(int x) 函数。

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

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


示例 1:

输入: 4
输出: 2
示例 2:

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



二、思路分析:

  • Math.sqrt(x) 方法解决
  • 向下取整:~~ 或Math.floor()

三、AC 代码

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
  return ~~Math.sqrt(x)
};

四、总结

  • 当然不止一种方法,;
/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
  return Math.floor(Math.sqrt(x))
};

官方提供了几种方法:

  • 二分查找
  • 牛顿迭代
var mySqrt = function (x) {
    let l = 0, r = x;
    let res = 0;
    while (l <= r) {
        let mid = Math.floor((l + r) / 2);
        if (mid * mid == x) { return mid; }
        else if (mid * mid < x) {
            res = l;
            l = mid + 1;
        }
        else if (mid * mid > x) { r = mid - 1; }
    }
    return res;
};



var mySqrt = function (x) {
    if(x<=0) return x;
    let res;
    for(let i = 1; i <= x; i++){
        if(i * i <= x && (i+1)*(i+1) > x){
            res = i;
            return
        }
    }
    return res;
}

仅供学习参考

参考题目