Leetcode 69. Sqrt(x)

Implement int sqrt(int x).
Compute and return the square root of x.

求一個整數x的平方根,返回int類型。

首先過濾x為負數的錯誤輸入;
其次x是0或者1的情況可以直接返回;
其余情況用二分法,左邊界初始為1,右邊界初始為x,最需要注意的地方是防止越界錯誤。為防止middle越界,middle求值表達式應寫為middle = left + (right - left) / 2,判斷middle和x的關系時,如果寫成middle * middle == x會有越界bug。

public int mySqrt(int x) {
    if (x < 0) {
        return 0;
    }
    if (x == 0 || x == 1) {
        return x;
    }

    int left = 1, right = x;

    while (left + 1 < right) {
        int middle = left + (right - left) / 2;
        if (middle == x / middle) {
            return middle;
        } else if (middle > x / middle) {
            right = middle;
        } else {
            left = middle;
        }
    }

    if (right <= x / right) {
        return right;
    }
    return left;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容