X 的平方根
题目¶
[69] x 的平方根
实现 int sqrt(int x) 函数。
暴力法¶
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function(x) {
if (x === 0 || x === 1) {
return x;
}
for(let i = 0; i < x; i++) {
if (i * i <= x && (i + 1) * (i + 1) > x) {
return i;
}
}
};
二分查找¶
var mySqrt = function(x) {
if (x === 0) {
return x;
}
return binarySearch(1, x, x);
};
function binarySearch(low, high, x) {
if (low >= high - 1) {
return low;
}
const mid = Math.floor((low + high) / 2);
if (mid * mid > x) {
return binarySearch(low, mid, x)
} else {
return binarySearch(mid, high, x)
}
}
牛顿迭代¶
x / n >= n
中,x / n
与n
的均值,作为锚点。
var mySqrt = function(x) {
if (x === 0) {
return x;
}
return newton(1, x);
};
function newton(n, x) {
const result = (x / n + n) / 2;
if (result === n) {
return Math.floor(n);
} else {
return newton(result, x);
}
}