描述
该题来自于力扣第50题
分析
一个非常简单的思路就是递归,当n是偶数时,计算pow(x,n/2)*pow(x,n/2),则n是奇数时,计算x * pow(x,(n-1)/2) * pow(x, (n-1)/2),一直递归直到n为1。
这里介绍另一种方法,使用迭代。考虑
其中
又因为
那
算法
- 初始化结果为
ans = 1,循环直到n == 0; - 判断
n的末尾是不是1,如果是1,则执行第3步; - 记录结果,
ans *= x - 更新
x,x *= x - 将
n右移一位
上述算法只考虑n>=0的情况,若n<0,则计算1 / pow(x, -n)即可
代码
python
```python class Solution: def mypow(self, x: float, n: int) -> float: ans = 1 while n > 0: if n & 1: ans *= x x *= x n >>= 1 return ansdef myPow(self, x: float, n: int) -> float:
if n < 0:
return 1 / self.mypow(x, -n)
return self.mypow(x, n)
继续这个系列