pow(x, n)

作者: sun5kong | 来源:发表于2019-07-11 18:17 被阅读0次

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

    示例 1:

    输入: 2.00000, 10

    输出: 1024.00000

    当指数为负数的时候,可以转化为底数取导数,指数取相反数的情况,这一点并不难理解。

    if n < 0:
        x = 1 / x
        n = -n
    

    方法1: 暴力破解法

        def mypow1(self, x, n):
            if n < 0:
                x = 1 / x
                n = -n
            ans = 1
            for i in range(n):
                ans = ans * x
            return ans
    
    复杂度分析

    时间复杂度:O(n)O(n). 我们需要将 x 连乘 n 次。

    空间复杂度:O(1)O(1). 我们只需要一个变量来保存最终 x 的连乘结果。

    方法2:快速幂算法(递归)

    假定我们已经得到了 x ^ nx
    n
    的结果,我们如何得到 x ^ {2 * n}x
    2∗n
    的结果?很明显,我们不需要将 x 再乘 n 次。使用公式 (x ^ n) ^ 2 = x ^ {2 * n}(x
    n
    )
    2
    =x
    2∗n
    ,我们可以在一次计算内得到 x ^ {2 * n}x
    2∗n
    的值。使用该优化方法,我们可以降低算法的时间复杂度。

        def mypow3(self, x, n):
            if n < 0:
                x = 1 / x
                n = -n
            return self.fastPow(x, n)
    
        def fastPow(self, x, n):
            if n == 0: return 1.0
            half = self.fastPow(x, n // 2)
            if n % 2 == 0:
                return half * half
            else:
                return half * half * x
    
    复杂度分析

    时间复杂度:O(logn).

    空间复杂度:O(logn).

    方法 3:快速幂算法(循环)

        def mypow2(self, x, n):
            if n < 0:
                x = 1 / x
                n = -n
            ans = 1
            while n:
                if n & 1:
                    ans *= x
                x *= x
                n >>= 1
            return ans
    
    复杂度分析

    时间复杂度:O(logn).

    空间复杂度:O(1).

    相关文章

      网友评论

          本文标题:pow(x, n)

          本文链接:https://www.haomeiwen.com/subject/mrfjkctx.html