由于要求空间复杂度为常数,所以需要使用快速幂。以base^19为例,19对应的二进制数为10011,base^19可以分解成base^16 * base^2 * base^1,16、2、1都是2的整数次幂,可以通过base *= base快速得到。
class Solution { public: double Power(double base, int exponent) { if (exponent == 0) return 1.0; if (base == 0) return 0; bool ism = false; if (exponent < 0) { ism = true; exponent = -exponent; } double res = 1; while (exponent) { if (exponent & 1) { res *= base; } base *= base; exponent >>= 1; } return ism? 1.0 / res: res; } };