算法思路:
- 特判:当x=0,直接返回0。
- 将n转换为long类型,以防止越界。
- 初始化res=1。
- 如果n<0,1/x再取相反数,使n变为正数。
- 当n不等于0时,循环计算。
- 如果n的最后一位是1,将x乘到res。
- x自乘,每次循环x乘的幂次增加一倍。
- 移除n的最后一位,循环继续。
- 循环结束,返回res。
该算法时间复杂度为O(log2n),空间复杂度为O(1)。使用快速幂算法,高效解决幂运算问题。
class Solution {
public double myPow(double x, int n) {
//特判:当x=0,直接返回0
if (x == 0){
return 0;
}
//将n转换为long类型,以免越界
long b = n;
double res = 1;
//如果b<0,1/x再取相反数
if (b < 0){
x = 1 / x;
b = -b;
}
//当b不等于0时,循环计算
while (b > 0){
//如果b的最后一位是1,将x乘到res
if((b & 1) == 1){
res *= x;
}
//x自乘,每次循环x乘方增长一倍
x *= x;
//移除b的最后一位,继续循环判断
b >>= 1;
}
//返回最终结果
return res;
}
}