实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
链接: leetcode.
解题思路:暴力的方法就是一个一个乘,时间是O(n)的。快速幂的核心思想就是,用位的方式,快速相乘。幂的本质是,幂函数参数转化为二进制,位值为一的位数的常数次方,然后将各个位的这种次方相乘,就是幂的答案,这里的常数就是下面的那个数。这样时间复杂度是O(1)的。
class Solution {
public double myPow(double x, int n) {
if(n == 0 || x == 1) return 1;
if(x == 0) return 0;
double res = 1;
boolean flag = false;
if(n < 0) {
flag = true;
n = -n;
}
// 算子
double temp = x;
while(n != 0) {
// 如果当前位为1,那么说明这个时候需要这个算子
if((n & 1) == 1) res *= temp;
// 位移,然后将算子次方
n >>>= 1;
temp *= temp;
}
if(flag) res = 1/res;
return res;
}
}
```