Java实现 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
 

public double myPow(double x, int n) {
        //核心思想主要还是折半,把原本比较大的这个幂变成原来的一半,这样结果就可以通过这个一半的幂相乘来组成了
        if (n == 0) {//任何数的0次幂都是1
            return 1;
        }
        //把这个问题转换成更小的问题进行解决
        double half = myPow(x,n/2);
        //如果是个偶数的话,就正好是一半幂的乘积
        if (n%2 == 0) {
            return half*half;
        }
        //如果是奇数并且n>0的话
        if(n > 0) {
            return half*half*x;
        }
        return half*half/x;
    }

经典的把一个相对较大的问题使用折半的方法转换成较小的问题,代码注释中也写明了解释。

还有另一种相同的思想,只是用循环来实现的,如下:

public double myPow(double x, int n) {
        double res = 1.0;
        int i = n;
        while (i != 0) {
            //如果是奇数,那么还要多乘一个x
            if (i%2 != 0) {
                res *= x;
            }
            //偶数直接自我平方
            x *= x;
            //折半
            i /= 2;
        }
        //判断n的正负来返回正确答案
        return n < 0 ? 1/res : res;
    }

 

你可能感兴趣的:(leetcode)