leetcode 每日一题 50. Pow(x, n)

Posted nil_f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 50. Pow(x, n)相关的知识,希望对你有一定的参考价值。

递归法

思路:

在计算一个数x的n次幂时xn,我们可以先递归计算出x的n//2次幂y=xn//2,然后根据递归计算的结果,如果n是偶数,则结果为xn=y2,否则xn=y2*x。

例如:

X77 =  (X38)2 * X  =  ((X19)2)2 * X =  (((X9)2 *X)2)2 * X =  ((((X4)2 * X)2 *X)2)2 * X =   (((((X2)2)2 * X)2 *X)2)2 * X 

代码:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        def quickMul(N):
            if N == 0:
                return 1.0
            y = quickMul(N // 2)
            return y * y if N % 2 == 0 else y * y * x
        
        return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)

迭代法

思路:

从递归法中可以看出,在最终结果中,最初的X贡献了X64,第二个X贡献了X8,第三个贡献了X4,最后一个贡献了X1,将每个贡献值相乘即为最终结果X77。这里可以看出,64,8,4,1  分别对应77的二进制中的1的位置,即 (1001101)2  ,所以我们可以通过对77除2迭代,把每个贡献值相乘得到结果。

代码:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        def quickMul(N):
            ans = 1.0
            x_contribute = x
            while N > 0:
                if N % 2 == 1:
                    ans *= x_contribute
                x_contribute *= x_contribute
                N //= 2
            return ans
        
        return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)

 

以上是关于leetcode 每日一题 50. Pow(x, n)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 每日一题 50. Pow(x, n)

leetcode 每日一题 50. Pow(x, n)

《LeetCode之每日一题》:43.Pow(x, n)

《LeetCode之每日一题》:145.x 的平方根

leetcode每日一题

leetcode每日一题