思路
最简单的办法就是暴力求解,不停的进行乘法运算。但是这样做很容易就超时了,其时间复杂度是O(n)。
求解这种问题最好的办法就是快速幂。
下面是代码实现。
Java版本
public class Solution {
public double Power(double base, int exponent) {
double res = 1.0;
if (exponent < 0) {
base = 1 / base;
exponent = 0 - exponent;
}
while (exponent != 0)
{
if ((exponent&1) != 0)
{
res *= base;
}
base *= base;
exponent >>= 1;
}
return res;
}
} c++版本
class Solution {
public:
double Power(double base, int exponent) {
if (exponent < 0)
{
base = 1 / base;
exponent = 0 - exponent;
}
double ans = 1.0;
double x = base;
while (exponent)
{
if (exponent & 1 != 0)
{
ans *= x;
}
x *= x;
exponent >>= 1;
}
return ans;
}
}; 速度都很不错,Java版本用时47ms,C++版本用时4ms。
快速幂算法的时间复杂度只有O(logN)。

京公网安备 11010502036488号