50. Pow(x, n)
Pow(x, n)
实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
思路
快速幂算法原理:
- 如果 n 是偶数:
pow(x, n) = pow(x * x, n / 2)
- 如果 n 是奇数:
pow(x, n) = x * pow(x * x, (n - 1) / 2)
处理负数指数:
如果 n 是负数,我们可以使用公式 pow(x, n) = 1 / pow(x, -n)
,即转换为正指数的情况。
class Solution {
public double myPow(double x, int n) {
if(n < 0) {
x = 1 / x;
n = -n;
}
return quickPow(x, n);
}
private double quickPow(double x, int n) {
//递归终止条件
if(n == 0){
return 1;
}
//递归计算一半的次幂
double half = quickPow(x, n / 2);
//如果n是偶数
if(n % 2 == 0){
return half * half;
}else{ //n 是奇数
return half * half * x;
}
}
}
代码解释:
-
myPow(double x, int n)
:这是公开的接口方法,用来计算x^n
- 如果
n
是负数,我们将x
变为1/x
,然后将n
变为其绝对值,这样就转化为正数次幂的情况。
- 如果
-
quickPow(double x, int n)
:这是使用递归的辅助方法,递归地计算幂。
- 当
n == 0
时,返回1
(这是幂的基本情况:x^0 = 1
)。 - 递归计算x^(n/2),然后根据 n 的奇偶性判断:
- 如果
n
是偶数:x^n = (x^(n/2))^2
。 - 如果
n
是奇数:x^n = (x^(n/2))^2 * x
。
- 如果
- 当
本文作者:Drunker•L
本文链接:https://www.cnblogs.com/drunkerl/p/18652314
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步