50. Pow(x,n)

50. Pow(x,n)

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

1、分治

我们可以注意到,当n的取值偏大时 x → x 2 → x 4 → x 8 x→x^2→x^4→x^8 xx2x4x8的计算方式远比循环 n n n次累乘快上许多,但是当 n n n为奇数时,还要再乘一个 x x x,即如果 n n n 为偶数,那么 x n = y 2 x^n=y^2 xn=y2;如果 n n n 为奇数,那么 x n = y 2 ∗ x x^n = y^2 * x xn=y2x
所以我们可以用分治的思想,用递归的方法,将幂次 n n n通过除以2的手法,讨论奇偶数的情况,得到最后的结果。其中若 n n n为负数,则x^n = 1/x^(-n)

递归

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n == 0:
            return 1.0
        elif n == 1:
            return x
        elif n == -1:
            return 1.0/x
        elif n == 2:
            return x * x
        elif n % 2 == 0:
            return self.myPow(self.myPow(x, n//2), 2)
        else:
            return self.myPow(self.myPow(x, (n-1)//2),2) * x

2、其他

class Solution:
    def myPow(self, x: float, n: int) -> float:
        return x**n
class Solution:
    myPow=pow

你可能感兴趣的:(leetcode)