LeetCode题解(python)-69. x 的平方根

LeetCode题解(python)
69. x 的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。
解题心得

解答本题,首先想到的肯定是用x*x逼近,可是这样太暴力了,很容易超时的呀,所以要想其他方法。

牛顿迭代法上线~

解答本题,也就是解非线性方程 t 2 − x = 0 t^2-x = 0 t2x=0,令 f ( t ) = t 2 − x f(t) = t^2-x f(t)=t2x

根据牛顿迭代法:

t 1 = t 0 − f ( t 0 ) f ′ ( t 0 ) t_1 = t_0 - \frac{f(t_0)}{f'(t_0)} t1=t0f(t0)f(t0)

代入 f ( t ) f(t) f(t)

t 1 = t 0 / 2 + x / ( 2 × t 0 ) t_1 = t_0/2+x/(2 \times t_0) t1=t0/2+x/(2×t0)

… \dots 以此类推

t n = t n − 1 / 2 + x / ( 2 × t n − 1 ) t_n = t_{n-1}/2+x/(2 \times t_{n-1}) tn=tn1/2+x/(2×tn1)

计算每个 t t t对应的 f ( t ) f(t) f(t)

f ( t ) &lt; 1 f(t)&lt;1 f(t)<1的时候,停止即可。(结果只要整数部分,所以只要最后误差小于1即可)

以下程序:

执行用时 : 64 ms, 在Sqrt(x)的Python3提交中击败了87.45% 的用户

内存消耗 : 13.2 MB, 在Sqrt(x)的Python3提交中击败了57.12% 的用户

解题代码
class Solution:
    def mySqrt(self, x: int) -> int:
        if x<2:
            return x
        t0 = x
        err = 2^31
        while err>=1:
            t1 = t0/2 + x/(2*t0)
            t0 = t1
            err = pow(t0,2) - x
        return int(t0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值