pow(x, n)

实现 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))