对于无法得到整数的情况,就取Math.floor。
暴力
这个解法就很暴力,但是面临2^31 - 1,这种情况,就要枚举很久了
var mySqrt = function (x) {
if (x <= 1) return x;
if (x === 2) return 1;
for (let i = 2; i < x; ++i) {
if ((i - 1) ** 2 <= x && x < i ** 2) return i - 1;
}
};
二分法
这里的时间复杂度就会降低很多 O(logn)
var mySqrt = function (x) {
if (x < 2) return x;
let left = 1,
right = x / 2;
let res = null;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (mid ** 2 <= x) {
res = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return res;
};