Leetcode JAVA刷刷站(50)Pow(x, n)

一、题目概述

二、思路方向

方法1:递归(考虑正负n)

       这种方法利用递归的思想,将问题分解为更小的子问题。同时,考虑到n可能是负数,我们可以先处理n的符号,然后将问题转化为正数幂的问题。

public class Solution {  
    public double myPow(double x, int n) {  
        long N = n; // 转换为long避免溢出  
        if (N < 0) {  
            x = 1 / x;  
            N = -N;  
        }  
        return powHelper(x, N);  
    }  
  
    private double powHelper(double x, long n) {  
        if (n == 0) return 1;  
        if (n % 2 == 0) {  
            double half = powHelper(x, n / 2);  
            return half * half;  
        } else {  
            return x * powHelper(x, n - 1);  
        }  
    }  
}

方法2:迭代

       迭代方法相比于递归,在处理大数时可能更加高效,因为它避免了递归栈的开销。

public class Solution {  
    public double myPow(double x, int n) {  
        long N = n;  
        if (N < 0) {  
            x = 1 / x;  
            N = -N;  
        }  
        double result = 1.0;  
        while (N > 0) {  
            if (N % 2 == 1) {  
                result *= x;  
            }  
            x *= x;  
            N /= 2;  
        }  
        return result;  
    }  
}

方法3:使用Math库(简单但不满足题目要求)

       虽然这不符合题目“实现”的要求,但在实际应用中,我们可以直接使用Java的Math库来完成这个任务。

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

     但请注意,这种方法虽然简单,但并不符合题目要求我们自己实现pow函数的意图。

执行结果: 

三、小结

       在面试或实际编程中,推荐使用递归或迭代的方法来实现pow函数,因为这两种方法不仅锻炼了我们的编程能力,还能更好地处理极端情况(如大数幂)和性能问题。而直接使用Math库虽然简单,但缺乏了编程的乐趣和深度。

 结语

生命太短

没留时间给我们每日带着遗憾醒来

!!!

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT 青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值