【数学】Leetcode 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

解题思路

快速幂算法的基本思想是利用幂的二分性质,将幂次分解成较小的幂次,减少乘法次数。

  • 如果n 是偶数,则 xn=(x(n/2))^2 ^次方
  • 如果 n 是奇数,则 x^n =x × x^(n-1)
  • 通过递归或迭代的方法,可以快速地计算x 的n 次幂。

Java实现

public class Power {
    public double myPow(double x, int n) {
        if (n == 0) {
            return 1.0;
        }
        
        long N = n;  // 使用 long 类型避免 n 取最小值时溢出
        //如果 n 为负数,将 x 转换为 1/x,并将n 转换为正数。
        if (N < 0) {
            x = 1 / x;
            N = -N;
        }
        
        double result = 1.0;
        while (N > 0) {// 当 n 不为 0 时
            //如果  n 是奇数,将当前的 x 乘到结果上。
            if (N % 2 == 1) {
                //奇数 x^n =x × x^(n-1) ->(n-1)变成偶数
                //走下面的偶数逻辑(变成(n-1)/2,不变直接n/2也可以,结果是等价的)
                result *= x;
            }
           //偶数 x^n=(x^(n/2))^2 -->(x^2)^(n/2)
            //将 x 平方,n 减半。
            x *= x;
            N /= 2;
        }
        
        return result;
    }

    // 测试用例
    public static void main(String[] args) {
        Power solution = new Power();
        System.out.println(solution.myPow(2.0, 10));  // 期望输出: 1024.0
        System.out.println(solution.myPow(2.1, 3));   // 期望输出: 9.261
        System.out.println(solution.myPow(2.0, -2));  // 期望输出: 0.25
    }
}

时间空间复杂度

  • 时间复杂度:O(log n),因为每次操作将 n 减半。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值