實現 int sqrt(int x) 函式。計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:輸入: 4
輸出: 2
示例 2:從i = 2開始不斷疊加,計算i*i的值,一旦出現i*i>x的情況,就跳出迴圈。需要注意i*i結果的超出int型範圍的情況。輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…, 由於返回型別是整數,小數部分將被捨去。
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+
xin
)對於本題,因為只是求其整數部分,所以當誤差小於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.由於返回型別是整數,小數部分將被捨去...