这里了解一下快速幂的概念:
幂计算的时候可以通过二分每次计算指数为一半的情况,例如

// 偶数情况 x^n = x^(n/2) * x^(n/2)
2^64 = 2^32 * 2^ 32
2^32 = 2^16 * 2^16
2^16 = 2^8 * 2^8
2^8 = 2^4 * 2^4
2^4 = 2^2 * 2^2
2^2 = 2^1 * 2^1

// 奇数情况 x^n = x^(n/2) * x^(n/2) * x
2^63 = 2^31 * 2^31 * 2

因此求取xn的时候可以递归分解为求取x(n/2)

思路

  1. 递归快速幂进行计算
class Solution {
    public double myPow(double x, int n) {
        if (n > Integer.MAX_VALUE || n < Integer.MIN_VALUE) return 0;
        return n > 0 ? quickMul(x, n) : 1/quickMul(x, -n);
    }

    double quickMul(double x, int n) {
        if (n ==0) return 1;
        // 递归快速幂
        double y = quickMul(x,n/2);
        // 判断奇偶性
        return (n&1) == 1 ? y*y*x:y*y;
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹