思路

最简单的办法就是暴力求解,不停的进行乘法运算。但是这样做很容易就超时了,其时间复杂度是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)。