50. Pow(x, n)

Pow(x, n)
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

思路

快速幂算法原理:

  1. 如果 n 是偶数:pow(x, n) = pow(x * x, n / 2)
  2. 如果 n 是奇数:pow(x, n) = x * pow(x * x, (n - 1) / 2)

处理负数指数:

如果 n 是负数,我们可以使用公式 pow(x, n) = 1 / pow(x, -n),即转换为正指数的情况。

class Solution {
    public double myPow(double x, int n) {
        if(n < 0) {
            x = 1 / x;
            n = -n;
        }

        return quickPow(x, n);
    }

    private double quickPow(double x, int n) {
        //递归终止条件
        if(n == 0){
            return 1;
        }

        //递归计算一半的次幂
        double half = quickPow(x, n / 2);

        //如果n是偶数
        if(n % 2 == 0){
            return half * half;
        }else{ //n 是奇数
            return half * half * x;
        }
    }
}

代码解释:

  1. myPow(double x, int n)

    :这是公开的接口方法,用来计算x^n

    • 如果 n 是负数,我们将 x 变为 1/x,然后将 n 变为其绝对值,这样就转化为正数次幂的情况。
  2. quickPow(double x, int n)

    :这是使用递归的辅助方法,递归地计算幂。

    • n == 0 时,返回 1(这是幂的基本情况:x^0 = 1)。
    • 递归计算x^(n/2),然后根据 n 的奇偶性判断:
      • 如果 n 是偶数:x^n = (x^(n/2))^2
      • 如果 n 是奇数:x^n = (x^(n/2))^2 * x
posted @ 2025-01-04 19:25  Drunker•L  阅读(58)  评论(0)    收藏  举报