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
x→x2→x4→x8的计算方式远比循环
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=y2∗x
所以我们可以用分治的思想,用递归的方法,将幂次
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