leetcode#69求平方根

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
                

牛頓迭代法

不斷枚舉,枚舉一點求他的根來逼近所求的根,通過下式來不斷迭代,具體理論如下

xn+1=xnf(xn)f(xn) x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)}
=xnxn2y02xn \begin{array}{l}{=x_{n}-\frac{x_{n}^{2}-y_{0}}{2 x_{n}}} \\ \end{array}
=xn+y02/x2 =\frac{x_{n}+y_{0}^{2}/ x}{2}


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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章