zeus
2026-03-12
点 赞
0
热 度
13
评 论
0

leetcode每日一题

  1. 首页
  2. leetcode每日一题

今天为大家带来leetcode题库中的第50题——Pow(x,n)

本题要求实现pow(x,n),即计算x的整数n次幂函数。

这道题的实现有多种方法,本次笔者在这里讲述两种常见方法。

方法一:暴力解法,即利用for循环直接进行。

class Solution {
public:
    double myPow(double x, int n) {
        long long N =n;
        if(N<0){
            x=1/x;
            N=-N;
        }
        //判断处理n为负数的情况
        double ans=1;
        for(long long i=0;i<N;i++ )
        ans=ans*x;
        //利用for循环直接对x连乘n次从而实现算法
        return ans;
    }
};

这种方法非常直观,代码中也给出了相关的注释。但暴力解法在这里的时间复杂度为O(n),和后面的方法相比就比较大,所以很多时候会要求你用复杂度更小的算法而不是直接用暴力解法。

方法二:分而治之,即利用快速幂的方法进行递归操作。

当我们要计算 xn 时,我们可以先递归地计算出 y=x^⌊n/2⌋,其中 ⌊a⌋ 表示对 a 进行下取整;

根据递归计算的结果,如果 n 为偶数,那么 xn=y2

如果 n 为奇数,那么 xn=y2×x;

递归的边界为 n=0,任意数的 0 次方均为 1。

class Solution {
public:
    double quickMul(double x, long long N) {
        if (N == 0) {
            return 1.0;
        }
        double y = quickMul(x, N / 2);
        return N % 2 == 0 ? y * y : y * y * x;
    }

    double myPow(double x, int n) {
        long long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
};

来源:leetcode官方题解

本次递归的方法时间复杂度为O(log n),空间复杂度为O(log n)。

ps:我们在方法二中也可以用迭代的方法

class Solution {
public:
    double quickMul(double x, long long N) {
        double ans = 1.0;
        // 贡献的初始值为 x
        double x_contribute = x;
        // 在对 N 进行二进制拆分的同时计算答案
        while (N > 0) {
            if (N % 2 == 1) {
                // 如果 N 二进制表示的最低位为 1,那么需要计入贡献
                ans *= x_contribute;
            }
            // 将贡献不断地平方
            x_contribute *= x_contribute;
            // 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可
            N /= 2;
        }
        return ans;
    }

    double myPow(double x, int n) {
        long long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
};

来源:leetcode官方题解

迭代方法下时间复杂度为O(logn),空间复杂度为O(1)。

上述几种方法重点理解后面两种,迭代和递归的思想十分重要。


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

目录

欢迎来到云游记

12 文章数
5 分类数
5 评论数
8标签数
最近评论
zeus

zeus


真的c

zeus

zeus


so easy

zeus

zeus


这文章真的招