算法通关村——Pow(x, n)问题解析

LeetCode50
pow(x,n) 在我刚开始做这题目的时候,我觉得不就实现个Math的pow(x,n)函数吗,这不是简简单单,直接循环遍历求解 再限定一下范围不就ok了吗? 但是没一会就被啪啪打脸,各种超时 和 数据的范围限制直接 把我卡住了。
我们先来看看原题
算法通关村——Pow(x, n)问题解析_第1张图片
本题为避免超时,我们采用**【快速幂算法】+ 递归** 的方法进行解题,
由于当 n 为负数时,我们可以计算x ^ (-n) 再取倒数得到结果,因此我们只需要考虑 n 为自然数的情况。
下面我们来介绍一下 【快速幂算法】
算法通关村——Pow(x, n)问题解析_第2张图片
代码实现如下:

 	public static double myPow(double x, int n) {
        long N = n; // 将 n 转换为 long 类型,以处理 Integer.MIN_VALUE 的情况
        return N > 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }

    // 辅助方法使用递归方式进行快速幂运算
    public static double quickMul(double x, long N){
        if (N == 0)
            return 1;
        
        double y = quickMul(x, N / 2); // 递归计算 x 的 N / 2 次方
        
        // 如果 N 是偶数,则平方结果;否则,平方结果并乘以 x
        return N % 2 == 0 ? y * y : y * y * x;
    }

你可能感兴趣的:(算法,数据结构,java,笔记)