LeetCode 050 Pow(x,n)

本文介绍了一种高效计算x的n次幂的方法,包括迭代和递归两种实现方式,避免了传统循环方法的超时问题,适用于-100.0<x<100.0和32位有符号整数n的范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

050 Pow(x,n)

题目:
实现 pow(x, n) ,即计算 x 的 n 次幂函数。

 示例 1:
    输入: 2.00000, 10
    输出: 1024.00000
    示例 2:
    输入: 2.10000, 3
    输出: 9.26100
    示例 3:
    输入: 2.00000, -2
    输出: 0.25000
    解释: 2-2 = 1/22 = 1/4 = 0.25

说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

如果用最普通的循环,没这么简单,会超时,可以用递归和迭代来解这题
方法一:迭代
思路:for循环中初始值设为n,每次除2,再判断i是否是2的倍数,如果不是就让res乘以x,然后让x再变成平方,如果为2的倍数,则不res乘x,让x变为平方即可

ps:每次n缩小一半,x变大一倍,判断是否该乘x,这样就减少很多时间

代码:

public static double myPow(double x, int n) {
        double res=1.0;
        for (int i=n; i!=0 ; i/=2) {
            if(i%2!=0) res*=x;
            x*=x;
        }
        return n<0?1/res:res;
    }

方法二:递归法
思路:x的n次方,可以针对n的奇偶进行讨论,如果是偶数则让x变为自身的平方,将n变为原来的一半,一直这样直到n为0;如果是奇数,则将n减一,在函数外再乘以x即可
代码:

 public static double myPow(double x, int n){
        if(n==0) return 1;
        if(n<0){
            return 1/myPow(x,-n);
        }
        if(n%2==1){
            return x*myPow(x,n-1);
        }
        return myPow(x*x,n/2);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值