【Leetcode】69. x 的平方根

34 阅读1分钟

leetcode-69.png

对于无法得到整数的情况,就取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;
};