leetcode刷题-50Pow(x, n)
题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
思路
最初的想法n>0计算res = res*x 计算n次,n<0,将x取倒数后同理,但结果表明计算速度太慢了。
后续应该采用快速幂的算法。这里的本质是分治的思想,
递归:例如当 n = 8 时,x^8 = (x^4)^2 = ((x^2)^2)^2,当n= 9 时x^9 = (x^4)^2*x = ((x^2)^2)^2
迭代:9 = 1001 x^9 = x^(8*1) * x^(4*0) * x^(2 *0)*x^(1*1),因此可以利用n的二进制数来拆分求解
实现
递归
class Solution: def myPow(self, x: float, n: int) -> float: if n <0: x = 1/x n = -n def mul(n): a = n//2 b = n%2 if n == 0: return 1.0 else: y = mul(a) if b == 0: return y*y else: return y*y*x result = mul(n) return result
迭代
class Solution: def myPow(self, x: float, n: int) -> float: if n <0: x = 1/x n = -n result = 1 while n > 0: if n%2 == 1: result *= x x *= x n = n//2 return result