从何时你也忌讳空山无人,从何时开|

Drunker•L

园龄:4个月粉丝:0关注:0

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

本文作者:Drunker•L

本文链接:https://www.cnblogs.com/drunkerl/p/18652314

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Drunker•L  阅读(9)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起