1. 程式人生 > >LeetCode 69. x 的平方根 Sqrt(x)(C語言)

LeetCode 69. x 的平方根 Sqrt(x)(C語言)

題目描述:

實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

輸入: 4
輸出: 2

示例 2:

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回型別是整數,小數部分將被捨去。

題目解答:

方法1:暴力法:

從1開始向後遍歷,直至其平方大於x
執行時間20ms左右,程式碼如下。

int mySqrt(int x) {
    if(x <= 0)
        return
0; long long i = 0; for(i = 1; ; i++) { if(i * i > x) break; } return i - 1; }

方法2:二分法

可以減少遍歷次數,利用二分法向合理的目標數逼近。
執行時間12ms左右,程式碼如下。

int mySqrt(int x) {
    if(x <= 0)
        return 0;
    if(x == 1)
        return 1;
    int l = 1, r = x / 2;
    long mid =
0, t = 0; while(l <= r) { mid = (l + r) / 2; t = mid * mid; if(t == x) return mid; else if(t > x) r = mid - 1; else l = mid + 1; } return r; }