[Math]050 Pow(x, n)

  • 分类:Math

  • 考察知识点:Math/分治

  • 最优解时间复杂度:**O(logn) **

  • 最优解空间复杂度:**O(logn)/O(1) **

50. Pow(x, n)

Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:


Input: 2.00000, 10

Output: 1024.00000

Example 2:


Input: 2.10000, 3

Output: 9.26100

Example 3:


Input: 2.00000, -2

Output: 0.25000

Explanation: 2-2 = 1/22 = 1/4 = 0.25

Note:

  • -100.0 < x < 100.0

  • n is a 32-bit signed integer, within the range [−231, 231 − 1]

代码:

Python蜜汁方法:

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        return x**n

Python蜜汁方法:

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        return x**n

迭代方法:

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        #边界情况
        if n==0:
            return 1
        
        sign=1
        if n<0:
            n=-n
            sign=-1
            
        res=1
        while n:
            if n%2!=0:
                res*=x
            x*=x
            n=n//2
            
        if sign==-1:
            return 1.0/res
        
        return res

递归方法:

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        #边界情况
        if n==0:
            return 1
        
        sign=1
        if n<0:
            n=-n
            sign=-1
            
        res=self.do_pow(x,n)
            
        if sign==-1:
            return 1.0/res
        
        return res
    
    def do_pow(self,x,n):
        if n==0:
            return 1
        y=self.do_pow(x,n//2)
        if n%2==1:
            y=y*y*x
        else:
            y=y*y
        return y

讨论:

1.这个题目好像用递归想比较简单

[Math]050 Pow(x, n)_第1张图片
Python蜜汁方法还是速度最快23333

你可能感兴趣的:([Math]050 Pow(x, n))