1問題描述
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回類型是整數,小數部分將被捨去。
求解
二分法
單調遞增可以用二分查找法
l=0 r=y 所求平方的數
mid=(l+r)/2
y=mid*mid
if y>y0 r=mid
if y<y0 l=mid
fabs(r-l)<1e-9
class Solution:
def mySqrt(self, x: int) -> int:
if x==0 or x==1:
return x
l=1
r=x
res=0
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:
def mySqrt(self, x):
if x <= 1:
return x
r = x
while r > x / r:
r = (r + x / r) // 2
return int(r)