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。
- 如果
- 当

浙公网安备 33010602011771号