實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回型別是整數,小數部分將被捨去。
二分查詢法
因為 \(y=x^2\) 是遞增的,所以可以使用二分查詢。
先是將 l 設為 0 ,r 設為 y ,mid = (l+r)/2 ,觀察 mid 的平方與 y 的關係,如果 \(^2 > y\) ,令 r=mid 進行下一輪,否則令 l=mid 進行下一輪。
# 二分查詢法
class solution(object):
def mysqrt(self, x):
""":type x: int
:rtype: int
"""if x == 0 or x == 1:
return x
l = 1
r = x
while l <= r:
m = (l + r) // 2
if m == x // m:
return m
elif m > x // m :
r = m - 1
else:
l = m + 1
res = m
return res
牛頓迭代法# 牛頓迭代法
class solution(object):
def mysqrt(self, x):
""":type x: int
:rtype: int
"""r = x
while r * r > x:
r = (r + x // r) // 2
return r
而程式語言內建方法多用另一種類似演算法,詳情可參考beyond3d - origin of quake3's fast invsqrt()。 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.由於返回型別是整數,小數部分將被捨去...