最直观的想法是,求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; } }