Leetcode——求pow(x,n)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010712012/article/details/84984038

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

示例 1:

输入: 2.00000, 10
输出: 1024.00000
示例 2:

输入: 2.10000, 3
输出: 9.26100
示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2 2 2^{-2} = 1 2 2 \frac{1}{2^{2}} = 1/4 = 0.25
说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

思路:这题其实本质是递归,递归和分治算法其实本质也是同一个东西。这里我们本来可以暴力递归,那么时间复杂度就是O(N),但是还有更好的,就是分治,把很多个x拆成很多组x分别相乘。但是这里要注意的是偶数和奇数有点不同。偶数的话 y = x n 2 y=x^{\frac{n}{2}} ,result=y * y;奇数时 y = x n 1 2 y = x^{\frac{n-1}{2}} ,result = y * y * x.
这时候复杂度为O(logN)

代码:

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
         if not n:
             return 1
         if n < 0:
             return 1/self.myPow(x,-n)
         if n%2:
             return x * self.myPow(x,n-1)
         return self.myPow(x*x,n/2)

或者是

        if n < 0:
            x = 1/x
            n = -n
        pow = 1
        while n:
            if n & 1:
                pow *= x
            x *= x
            n >>= 1 #右移位能减少运算时间
        return pow

猜你喜欢

转载自blog.csdn.net/u010712012/article/details/84984038