leetcode刷题-50Pow(x, n)

题目

实现 pow(xn) ,即计算 x 的 n 次幂函数。

思路

最初的想法n>0计算res = res*x 计算n次,n<0,将x取倒数后同理,但结果表明计算速度太慢了。

后续应该采用快速幂的算法。这里的本质是分治的思想,

递归:例如当 n = 8 时,x^8 = (x^4)^2 = ((x^2)^2)^2,当n= 9 时x^9 = (x^4)^2*x = ((x^2)^2)^2

迭代:9 = 1001 x^9 = x^(8*1) * x^(4*0) * x^(2 *0)*x^(1*1),因此可以利用n的二进制数来拆分求解

实现

递归

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n <0:
            x = 1/x
            n = -n
        def mul(n):
            a = n//2
            b = n%2
            if n == 0:
                return 1.0
            else:
                y = mul(a)
                if b == 0:
                    return y*y
                else:
                    return y*y*x
        result = mul(n)
        return result

 迭代

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n <0:
            x = 1/x
            n = -n
        result = 1
        while n > 0:
            if n%2 == 1:
                result *= x
            x *= x
            n = n//2
        return result

 

posted @ 2020-08-03 16:10  maoguai  阅读(127)  评论(0编辑  收藏  举报