Leetcode之运算库函数自定义

本文提供LeetCode题目50-Pow(x, n)与69-Sqrt(x)的Python3实现方案。详细解析了幂运算中如何处理正、负指数的情况,并通过递归方式求解;此外,还介绍了利用牛顿迭代法高效求解给定数值的平方根。

一、Leetcode50——pow

【注意点】

   1、n的值可以为正,负,0

   2、O(n)会TLE,使用递归时,一定要将中间步保存

   3、有博文中提到,若n<0,可以令n=-n, x = 1/x,但需要对n取反后是否出界进行处理,以下代码可以避免这个问题

【Python3代码】

class Solution:
    def myPow(self,x,n):
        if n == 0:
            return 1
        elif n == 1:
            return x;
        elif n == -1:
            return 1/x;
        else:
            temp = self.myPow(x,n//2)
            return temp*temp*self.myPow(x,n-n//2-n//2) 

二、Leetcode69——sqrt

【思路】

    牛顿迭代法f(x) = x^2-a 的根,a即为要开方的数,根为开方的结果,首先任意给定x0一个非0的初值,根据牛顿迭代法易得x0的迭代公式为:x0 = (x0^2+a)/(2x0)

【Python3代码】

class Solution:
    def mySqrt(self, x):
        if x == 0:
            return 0
        else:
            x0 = x
            x1 = (x0*x0+x)/2/x0
            while(abs(x0-x1) > 0.1):
                x0 = x1
                x1 = (x0*x0+x)/2/x0
            return int(x1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值