题目:
Implement pow(x, n).
题意:求解x的n次幂
解题思路:二分查找,即pow(x,n) = pow(x,n/2)*pow(x,n/2)*pow(x,n%2),这里我采用递归的方法并且使用map记录中间值,代码如下:
class Solution {
map<int, double> temp_result;
public:
double pow(double x, int n) {
if(x == 0)
return 0;
if(n == 0)
return 1;
if(n == 1)
return x;
if(n < 0){
x = 1/x;
n = -n;
}
if(temp_result.find(n/2) == temp_result.end()){
temp_result[n/2] = pow(x, n/2);
}
return temp_result[n/2] * temp_result[n/2] * pow(x, n%2);
}
};
做完后发现了一个非递归的方法,每次利用n%2==1时更新结果,速度很快算法复杂度约为log(n).代码如下:
class Solution {
public:
double pow(double x, int n) {
if(x == 0){
return 0;
}
if(n < 0){
n = -n;
x = 1/x;
}
double result = 1;
for(double temp=x; n > 0; n = n >> 1){
if( n % 2 == 1){
result *= temp;
}
temp = temp * temp;
}
return result;
}
};