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


京公网安备 11010502036488号