leetcode 69 x的平方根

2021-10-02 21:34:31 字數 1326 閱讀 7349

實現 int sqrt(int x) 函式。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

輸入: 4

輸出: 2

示例 2:

輸入: 8

輸出: 2

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

從i = 2開始不斷疊加,計算i*i的值,一旦出現i*i>x的情況,就跳出迴圈。需要注意i*i結果的超出int型範圍的情況。

public

intmysqrt

(int x)

return

(int

)i -1;

}

該解法簡單容易想到,但是顯然效率不高,比如當x = 2147395600時,結果為46340,也就是說迴圈需要執行4萬多次。時間複雜度是o(n12

n^\frac

n21​

),空間複雜度o(1)。

牛頓法的公式是:xn+

1=xn

+f(x

n)f′

(xn)

x_ = x_+\frac)}'(x_)}

xn+1​=

xn​+

f′(x

n​)f

(xn​

)​求解x 2=

nx^2 = n

x2=n

就是求:f(x

)=x2

−n=0

f(x) = x^2 - n = 0

f(x)=x

2−n=

0的根。帶入上面公式得到:xi+

1=xi

+xi2

−n2x

i=12

(xi+

nxi)

x_ = x_+\frac =\frac(x_i+\frac)

xi+1​=

xi​+

2xi​

xi2​

−n​=

21​(

xi​+

xi​n

​)對於本題,因為只是求其整數部分,所以當誤差小於1時結束迭代。

public

intmysqrt

(int x)

return

(int

)x1;

}

時間複雜度o(log(n)),空間複雜度o(1),

LeetCode 69 x 的平方根

實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。usr bin p...

Leetcode 69 x 的平方根

實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 複製 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.複製 由於返回型別是整數,小數部分將被捨去。找...

leetcode69x 的平方根

69.x 的平方根 實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去...