java - LeetCode 50.Pow(x, n) 计算x的n次幂函数(三种解法)(详细讲解,小白入手)

LeetCode 50.Pow(x, n)

计算x的n次幂函数。

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。 

解析:

  1. 负数的边界 -2^31 , 直接转正数会越界。
    正数边界2^31 − 1,负数转正2^31,越界。
    所以将n的类型int转为类型long。
  2. 次幂n是负数,首先要转正,将1/x,再-n转正。
  3. 如果次幂是单数,我们先保留下x,将次幂n-1,再在最终结果res乘x。
  4. 因为二分查找每次减半(i/2),所以我们从后向前循环。
  5. 如果 i 取模2为1,证明幂次为单数,我们就要乘一次之前保留的x值。
  6. 走到最后都会进入if(i % 2 == 1),这个判断,得到最终res值。

二分查找

class Solution {
    public double myPow(double x, int n) {
        long N = n;
        double res = 1.0;
        if (N < 0){
            x = 1/x;
            N = -N;
        }
		
		//辅助变量取x值,如果幂次是单数,那就将这个数乘一次
        double cur = x;
        for(long i = N; i > 0; i /= 2){
            if(i % 2 == 1){
                res *= cur;
            }
            cur *= cur;
        }
        return res;
    }
}

最快解法

class Solution {
    public double myPow(double x, int n) {
        return Math.pow(x,n);
    }
}

哈哈哈哈,直接用公式,捷径。

暴力解法

class Solution {
    public double myPow(double x, int n) {
        double res = 1;
        if (n < 0){
            x = 1/x;
            n = -n;
        }
        for(int i = 0; i < n; i++){
            res *= x;
        }
        return res;
    }
}

版权声明:本文为weixin_51136573原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。