LeetCode——快速幂

快速幂
例如:5的5次方可以写成如下
(5个5相乘)5 * 5 * 5 * 5 * 5 = 25 * 25 * 5 = 5^2 * 5^2 * 5
(4个5相乘)5 * 5 * 5 * 5 = 25 * 25 = 5^2 * 5^2
(n个5相乘)5 ^ (n/2) * 5 ^ (n/2) * 5 (n为奇数)
5 ^ (n/2) * 5 ^ (n/2) (n为偶数)

public static double myPow(double x, int n) {
        if (n == 0) {
            return 1;
        }
        double A = myPow(x, n / 2);
        if (n % 2 == 0) {
            return A * A;
        } else {
            return A * A * x;
        }
}

核心思想:将问题的规模缩小到一半,剩下的操作都是常数目
所以时间复杂度为O(logn)

猜你喜欢

转载自blog.csdn.net/reuxfhc/article/details/80462501