LeetCode刷题笔记-分治法

69 阅读1分钟

将问题划分为互不相交的子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解。

50 Pow(x, n) Medium

Implement pow(x, n).

Example 1: Input: 2.00000, 10 Output: 1024.00000

Example 2: Input: 2.10000, 3 Output: 9.26100

思路:二分法 x^n=x^{n/2} × x^{n/2} × x^{n (mod) 2}

class Solution {
    public double myPow(double x, int n) {
        // 判断指数正负
        if (n < 0) {
            return 1 / power(x, -n);
        } else {
            return power(x, n);
        }
    }

    private double power(double x, int n) {
        if (n == 0) {
            return 1;
        }
        double v = power(x, n / 2);    // 必须要先计算出,否则会超时
        // 判断指数奇偶
        if (n % 2 == 0) {
            return v * v;
        } else {
            return v * v * x;
        }
    }
}