Leetcode50. Pow(x, n)

【5分钟力扣】50. 用python3实现Pow(x,n)幂次运算 用5分钟时间学习一下python幂次运算,了解和掌握二分法优化时间复杂度 阅读详情

Every day a Leetcode

题目来源:50. Pow(x, n)

解法1:递归

代码:

/*
 * @lc app=leetcode.cn id=50 lang=cpp
 *
 * [50] Pow(x, n)
 */

// @lc code=start
class Solution
{
public:
    double myPow(double x, int n)
    {
        if (n == 0)
            return 1.0;
        if (n < 0)
            return myPow(1.0 / x, abs(n));
        return x * myPow(x, n - 1);
    }
};
// @lc code=end

结果:超时

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),即为递归的层数。

空间复杂度:O(n),即为递归的层数。这是由于递归的函数调用会使用栈空间。

解法2:快速幂 + 递归

「快速幂算法」的本质是分治算法。举个例子,如果我们要计算 x64,我们可以按照:

x → x2 → x4 → x8 → x16 → x32 → x64

的顺序,从 x 开始,每次直接把上一次的结果进行平方,计算 6 次就可以得到 x64 的值,而不需要对 x 乘 63 次 x。

再举一个例子,如果我们要计算 x77 ,我们可以按照:

x → x2 → x4 → x9 → x19 → x38 → x77

的顺序。在x → x2、x2 → x4、x19 → x38 这些步骤中,我们直接把上一次的结果进行平方,而在 x4 → x9、x9 → x19、x38 → x77 这些步骤中,我们把上一次的结果进行平方后,还要额外乘一个 x。

直接从左到右进行推导看上去很困难,因为在每一步中,我们不知道在将上一次的结果平方之后,还需不需要额外乘 x。但如果我们从右往左看,分治的思想就十分明显了:

  • 当我们要计算 xn 时,我们可以先递归地计算出 y = x⌊n/2⌋
  • 根据递归计算的结果,如果 n 为偶数, xn = y2;如果 n 为奇数, xn = y2 * x;
  • 递归的边界为 n = 0,任意数的 0 次方均为 1。

由于每次递归都会使得指数减少一半,因此递归的层数为 O(logn),算法可以在很快的时间内得到结果。

代码:

/*
 * @lc app=leetcode.cn id=50 lang=cpp
 *
 * [50] Pow(x, n)
 */

// @lc code=start
class Solution
{
public:
    double quickMul(double x, int n)
    {
        if (n == 0)
            return 1.0;
        double y = quickMul(x, n / 2);
        if (n % 2 == 0)
            return y * y;
        else
            return y * y * x;
    }
    double myPow(double x, int n)
    {
        if (n >= 0)
            return quickMul(x, n);
        else
            return quickMul(1.0 / x, abs(n));
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(logn),即为递归的层数。

空间复杂度:O(logn),即为递归的层数。这是由于递归的函数调用会使用栈空间。

【中等】力扣算法题解析LeetCode50:Pow(x,n) 本文介绍了快速幂算法(迭代法)实现pow(x, n)函数的解题思路和Java代码实现。核心步骤包括:处理负数指数、使用位运算进行快速幂计算。算法通过将指数分解为二进制形式,每次迭代将底数平方,仅当二进制位为1时才乘入结果,实现O(logn)的时间复杂度。代码使用long类型避免溢出,并通过位运算优化性能。 阅读详情

相关推荐

时序分析-由D触发器结构来理解Tsu、Th

FPGA逻辑单元内的D触发器(D-FF)是一种在时钟的上升沿(或下降沿)将输入信号的变化传送至输出的边沿触发器。 数字电子技术基础-闫石(第五版)边沿D触发器内部结构见下图: 而FPGA原理与结构(日)一书中,内部结构较之上图多了俩反相器: 由传输门和俩个反相器组成一个循环电路(锁存器),再由前后两级锁存器按主从结构链接而成。这里的传输门起开关作用,随着CLK的状态变化切换开关。只看输出的话,前级锁存器的值会随着时钟输入的变化井然有序地传入后级锁存器。为了防止时钟信号变化时输入信号发生冒险,从而使稳定.

XY_Chang的博客 3975

力扣每日打卡 50. Pow(x, n) (中等)

这是刷算法题的第十一天,用到的语言是JS 题目:力扣 50. Pow(x, n) (中等)

2301_79369384的博客 2674

使用 Restart Extension 继续解决 Ansys 机械分析

您正在执行复杂或大型的多步有限元分析,突然,您意识到经过数小时的求解后,您需要添加或修改边界条件。在本篇博文中,您将了解如何利用 Ansys Mechanical 中的 RestartAnalysis 扩展来扩展多步分析,方法是合并额外的时间步骤和边界条件,而不会丢失已计算的结果。幸运的是,在 Mechanical 中,有一种直接的方法可以实现这一点,而不会损害您之前的结果,而这在添加新边界条件和使用重新启动点时经常发生。得到的结果符合预期,您可以看到施加的力产生的这两个部分之间的相对位移。

jkh920184196的博客 1233

Leetcode 50:Pow(x, n)(超详细的解法!!!)

layout: post title: Leetcode 50:Pow(x, n)(超详细的解法!!!) category : 算法 tags : [python, c, c++] stickie: true date: 2018-12-9 00:00:00 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示...

coordinate的博客 2910

Python Selenium调用IE11报错全解析:从环境配置到稳定运行

在Web自动化测试领域,Selenium作为主流的跨浏览器测试框架,其核心原理是通过WebDriver协议与不同浏览器的驱动程序进行通信,实现对浏览器行为的模拟与控制。这一技术为软件测试的自动化、回归测试的效率提升提供了重要价值,广泛应用于金融、政务等对遗留系统兼容性要求高的行业场景。然而,当技术栈涉及过时的浏览器如IE11时,环境配置的复杂性显著增加,特别是Python与Selenium的组合常遭遇驱动兼容性、安全设置等挑战。本文聚焦于解决Python Selenium驱动IE11时的典型报错问题,深入剖

weixin_28834765的博客 324

RK3568 NFS rootfs配置与调试实战指南(已验证)

本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。

weixin_29175469的博客 282

Leetcode[二分查找] 50. Pow(x, n)

Leetcode[二分查找] 50. Pow(x, n)审题代码实现反思 审题 实现 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/2^2 = 1/4 = 0.25 说明: -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围

weixin_45415929的博客 1182

深度残差网络的无人机多目标识别

深度残差网络的无人机多目标识别 人工智能技术与咨询 来源:《图学学报》。作者翟进有等 摘要:传统目标识别算法中,经典的区域建议网络(RPN)在提取目标候选区域时计算量大,时间复杂度较高,因此提出一种级联区域建议网络(CRPN)的搜索模式对其进行改善。此外,深层次的卷积神经网络训练中易产生退化现象,而引入残差学习的深度残差网络(ResNet),能够有效抑制该现象。对多种不同深度以及不同参数的网络模型进行研究,将两层残差学习模块与三层残差学习模块结合使用,设计出一种占用内存更小、时间复杂度更低的新型多捷.

m0_62870606的博客 3117

LeetCode50-Pow(x, n)

LeetCode50-Pow(x, n) 实现 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=122=14=0.252^{-2} = \frac {1}{2^{2...

lyd1995的博客 231

Blender点云渲染实战:用Geometry Nodes快速搞定论文配图(附Cycles渲染技巧)

本文详细介绍了如何利用Blender的Geometry Nodes系统,高效地将三维点云数据转化为高质量的科研论文配图。通过实战步骤,从数据导入、节点化几何处理、材质赋予到Cycles渲染引擎的优化设置,手把手教你制作出专业、美观的可视化图像,助力科研成果展示。

hp777的博客 266

wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

wps js宏入门看这里,我写了常用的js操作Excel的方法:获取工作簿对象、获取工作表对象、获取单元格的值、链接转图片、生成条形码图片、单元格区域数据转二维数组方法、保存工作簿、弹出输入框、YesNo选择框,助你从VBA转战JS。

huaermeier的博客 3万+

LeetCode 力扣 50. Pow(x, n)

题目描述(中等难度) 就是求幂次方。 解法一 求幂次方,用最简单的想法,就是写一个 for 循环累乘。 至于求负幂次方,比如 $2^{-10}$,可以先求出 $2^{10}$,然后取倒数,$1/2^{10}$ ,就可以了。 double mul = 1; if (n > 0) { for (int i = 0; i < n; i ) { mul *= x; ...

wind_liang的博客 978

fMRI独立成分分析方法(ICA)工具GIFT

详细介绍了进行fmri数据进行ICA分析的工具包GIFT的使用,和进行ICA分析的流程。

m0_58256026的博客 1万+

【LeetCode】50. Pow(x, n)

本文介绍了快速幂算法实现x的n次幂计算。通过分治和位运算将时间复杂度优化至O(logn),对比了递归、迭代、分治和位运算四种实现方式。重点分析了边界条件处理,包括负数指数、零指数等特殊情况,并提供了相应的代码优化策略。文章还总结了算法的应用场景和测试用例设计方法,强调了快速幂在数学计算、密码学等领域的实用价值。核心是通过二进制分解指数,利用幂运算性质实现高效计算。

qq_32019341的博客 1053

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

递归-50.Pow(x,n)-力扣(LeetCode)

个人主页:1白天的黑夜1-优快云博客专栏:力扣刷题录_1白天的黑夜1的博客-优快云博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-优快云博客目录一、题目解析二、算法原理解法1:暴力循环->时间复杂度:超时解法2:快速幂->时间复杂度:O(log n)如何编写递归代码?1、重复子问题->函数头2、只关心某一个子问题做什么->函数体3、递归函数的出口细节问题1、观察题目条件可知n有正也有负2、n次方数的负数转正可能会溢出根据编写思路和细节问题,去编写尝试代码,提升自己的代码能力,题目链

black_bear_white的博客 1240

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【题解】【LeetCode】50. Pow(x, n)

原题传送:链接 50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000,102.00000, 102.00000,10 输出: 1024.000001024.000001024.00000 示例 2: 输入: 2.10000,32.10000, 32.10000,3 输出: 9.261009.261009.26100 示例 3: 输入: 2.00000,−22.00000, -22.00000,−2 输出: 0.250000.25

葑鈊丶 516

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

刷题记录(LeetCode 50 Pow(x,n))

思路:如果按照一般的递归模板去写,写成myPow(x)=myPow(x, n-1)*x,在本题中会导致栈溢出,因为计算次数太多。PS:力扣给的C++板子的n默认是int类型,结果测试数据里n的大小超出了int的最大量。改成long就行了。对于负数,使用1/myPow(x, -n)即可。,这样计算次数就可以从原本的n降低为。

YaoSolar的博客 212

leetcode力扣每日一题50. Pow(x, n)

题目描述 实现 pow(x, n) ,即计算 x 的 n 次幂函数 我们先来看一下比较容易理解的递归或循环 以下是递归的例子,是容易理解的,但是空间复杂度和时间复杂度上却很多 我们不难看出 时间复杂度为O(n); 空间复杂度为O(n); class Solution { public: double myPow(double x, int n) { if(x==1){ return x; } if(x==-1){

qq_45841146的博客 310

LeetCode 50. Pow(x, n)

目录LeetCode 50. Pow(x, n)题目描述解题 LeetCode 50. Pow(x, n) 题目描述 实现 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 说明: -100.0 < x < 100.0

s_Shune 147

LeetCode 50. Pow(x,n)

LeetCode 50. Pow(x,n) 题目描述:实现pow(x,n)pow(x,n)pow(x,n),即计算x的n次幂函数。 样例 输入:2.00000, 10 输出:1024.00000 输入: 2.10000, 3 输出: 9.26100 输入: 2.00000, -2 输出: 0.25000 解题思路 快速幂,注意n为负数情况。 class Solution { public: double myPow(double x, int n) { typedef long

king_fdy的博客 290

LeetCode第50题思悟——Pow(x, n)(powx-n)

LeetCode第50题思悟——Pow(x, n)(powx-n) 知识点预告 对边界值的处理意识; 对整数溢出的处理; 折半的思想 题目要求 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/powx-n 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 示例...

博采众长,自成一派; 502

C++/python描述 LeetCode 50. Pow(x, n)

C++/python描述 LeetCode 50. Pow(x, n)   大家好,我叫亓官劼(qí guān jié ),在优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页 由于学习工作的需要,算法刷题将会逐渐由C++向Python3过度,正在过度中,如实现的不太优美,请见谅。 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!!

一起加油 933

c/c++ 力扣 LeetCode 50.Pow(x,n)

题目链接 力扣 50.Pow(x,n) 不想戳的看下图 这里,我们给出4种解法。 解法一:直接返回函数值 return pow(x,n); //注:pow是计算以x为底的n次方值 解法二:暴力求解 代码如下: class Solution { public: double myPow(double x, int n) { double result = 1; if (n < 0) x = 1 / x, n = -n; for (int i =

镭射瓶的博客 344

Leetcode 中等:50. Pow(x,n)

我们先算出所有2的幂,然后在算出所有x的2的幂次方。再把n拆成二进制,把二进制当中对应位置是1的值乘起来,就得到了结果。,即计算 x 的 n 次幂函数。可以拆成二进制表示,例如当。时,5的二进制是0101,

老马的程序人生 479

Python Leetcode 50. Pow(x, n)

Python Leetcode 50. Pow(x, n) # 递归 class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """ def quickmul(N): if N ==0: return 1.0

GhostintheCode的博客 425

leetcode 50. Pow(x, n)

leetcode 50. Pow(x, n) 题目详情 题目链接 实现 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 说明: -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围是 [−231,

qq_33789406的博客 152
上一篇: 计算机图形学 | 奇妙的真实感——片元着色
下一篇: 计算机图形学 | 实验八:Phong模型
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

UestcXiye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值