题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
- 1、当幂为负时,取倒数;
- 2、当幂为0时,若底非0,则取1,若底为0,无意义,也取1;
- 3、遍历则时间复杂度为O(n),对求幂进行优化,当幂数为偶数时,结果为幂为exponent/2的两个数的乘积,当幂为奇数时,结果为幂为(exponent-1)/2的两个数的乘积,再乘base。时间复杂度O(logn)。
1、递归
class Solution {
public:
double Power(double base, int exponent) {
if (exponent == 0) return 1;
if (exponent == 1) return base;
int temp = abs(exponent);
double result = Power(base, temp >> 1);
result *= result;
if ((temp & 0x1) == 1)
result *= base;
result = exponent >= 0 ? result : 1/result;
return result;
}
};
2、非递归
class Solution {
public:
double Power(double base, int exponent) {
if (exponent == 0) return 1;
if (exponent == 1) return base;
int temp = abs(exponent);
double result = 1.0;
while (temp) {
if (temp & 0x1 == 1) result *= base;
base *= base;
temp >>= 1;
}
result = exponent >= 0 ? result : 1/result;
return result;
}
};