最直观的想法是,求n次方,就乘n次,那么时间复杂度是O(n)。进行优化就考虑二分。


首先考虑特殊情况,指数为0,结果必为1,指数为1,结果为当前底数的值。还有就是底数为负数的情况,以及奇数二分时会多一个数。
图片说明

public class Solution {
    public double Power(double base, int exponent) {
    if (exponent == 0)
        return 1;
    if (exponent == 1)
        return base;
//之前是递归结束的判断,现在是正文。用一个变量记录底数是否正负,正的是本身,负的是倒数
    boolean isNegative = false;
    if (exponent < 0) {
        exponent = -exponent;
        isNegative = true;
    }
    double pow = Power(base * base, exponent / 2);
    if (exponent % 2 != 0)  //当指数是奇数时,二分会多一个数,因此可以在递归完成后再乘
        pow = pow * base;
    return isNegative ? 1 / pow : pow;
  }
}