50. Pow(x, n)(Leetcode) C++递归实现(超详细)

文章目录

  • 前言
  • 一、题目分析
  • 二、算法原理
    • 1.递归分析
    • 2.递归实现
  • 三、代码实现+复杂度分析
  • 总结


前言

在本文章中,我们将要详细介绍一下Leetcode中第50题, Pow(x, n)的内容

一、题目分析

在这里插入图片描述

题目要求很简单:我们模拟实现一个pow函数。

二、算法原理

1.递归分析

🏉🏉我们按照正常思路,放在循环里一个个乘起来就可以。
我们来实现以下看一下是否可行!!!

class Solution {
public:double myPow(double x, int n) {int tmp=n;if(n<0) n=-n;double ret=1.0;for(int i=0;i<n;i++){ret*=x;}return tmp<0? (1.0/ret):ret;}
};

我们发现超出了时间限制,时间复杂度O(N)

在这里插入图片描述
🏉🏉我们来看一种全新的算法–-快速幂

我们来一看具体是什么
✨ 比如我们要求2^17 , 我们可以先求2^8, 利用两个2^8相乘再乘一次8就得到了2 ^17;
✨ 同样的道理,我们求2 ^8,先求2 ^4, 利用两个2^4相乘就得到了2 ^8;
✨ 当我们求到2^1,先求2 ^0,利用两个2 ^0 相乘再乘以个2,就得到了

我们发现了重复子问题,当次方数为奇数时,我们多乘一次就可以。

2.递归实现

💝💝.相同子问题---->函数头
我们就是根据两个参数,一个是次幂数,一个是要进行次幂的数,返回结果
double pow(double x,int n);
💝💝.只关心某个子问题的求解过程—>函数体
我们先求出递归后结果tmp,
然后判断n的奇偶数,分情况讨论。返回结果
💝💝.递归出口
当n==0时,不在往下分,返回结果

同时还要考虑n为负数的情况

三、代码实现+复杂度分析

我们来实现一下代码

class Solution {
public:double myPow(double x, int n) {return n<0?1.0/pow(x,-n):pow(x,n);}double pow(double x,int n){if(n==0){return 1.0;}double tmp=pow(x,n/2);if(n%2==1){return tmp*tmp*x;}else{return tmp*tmp;}}
};

我们发现还是有错误

在这里插入图片描述

🎁🎁我们知道int的类型范围是-2^31 -----2^31-1
当n=-2^31,我们把它转化为正数计算,随后再用1去除以这个数据

2^31已经超过了整形的范围,我们需要进行类型转化,转化成为long long

class Solution {
public:double myPow(double x, int n) {return n<0?1.0/pow(x,-(long long)n):pow(x,n);}double pow(double x,long long n){if(n==0){return 1.0;}double tmp=pow(x,n/2);if(n%2==1){return tmp*tmp*x;}else{return tmp*tmp;}}
};

在这里插入图片描述

时间复杂度O(logN)
空间复杂度O(logN)

总结

以上就是我们对Leetcode中第50道题目 Pow(x, n)详细介绍,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

32--网络编程

1.、网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&a…

从仿写持久层框架到MyBatis核心源码阅读

接上篇手写持久层框架&#xff1a;https://blog.csdn.net/liwenyang1992/article/details/134884703 MyBatis源码 MyBatis架构原理&主要组件 MyBatis架构设计 MyBatis架构四层作用是什么呢&#xff1f; API接口层&#xff1a;提供API&#xff0c;增加、删除、修改、查询…

【SpringBoot】SwaggerKnif4j接口文档集成

[TOC] 序&#xff1a;接口文档 ​ 在开发过程中&#xff0c;接口文档是非常重要的一环&#xff0c;在 Spring Boot 中&#xff0c;我们可以通过集成第三方来实现接口文档的自动生成。 ​ 通过注解来描述接口&#xff0c;然后根据这些注解自动生成接口文档&#xff0c;它不仅…

⑩①【缓存】Redis持久化 RDB + AOF

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑩①Redis持久化 RDB AOF Redis数据快照 - RD…

Channel 使用事项和注意细节

&#xff08;1&#xff09;channel 可以声明为只读&#xff0c;或者只写性质 &#xff08;2&#xff09;channel 只读和只写的最佳实践案例 在默认情况下&#xff0c;管道是双向管道&#xff0c;即可读可写。 var ch chan intfunc main() {//声明为只写管道var chan1 chan<…

【中小型企业网络实战案例 五】配置可靠性和负载分担

【中小型企业网络实战案例 三】配置DHCP动态分配地址-CSDN博客 【中小型企业网络实战案例 四】配置OSPF动态路由协议 【中小型企业网络实战案例 二】配置网络互连互通-CSDN博客 【中小型企业网络实战案例 一】规划、需求和基本配置_大小企业网络配置实例-CSDN博客 配置VRRP联…

跨境电商卖家一般用海外云手机做什么?

近些年&#xff0c;海外云手机在跨境电商领域已经逐渐流行开来&#xff0c;但是对于许多人来说海外云手机还是比较陌生&#xff0c;它有什么作用&#xff1f;它可以用于哪些场景&#xff1f;在本文中&#xff0c;我们将详细跨境电商卖家一般是怎样使用海外云手机的。 1. 海外网…

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history&#xff1a;显示命令历史列表2.2 history -a&#xff1a;将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…

Go语言中的HTTP重定向

大家好&#xff0c;我是你们可爱的编程小助手&#xff0c;今天我们要一起探讨如何使用Go语言实现HTTP重定向&#xff0c;让我们开始吧&#xff01; 大家都知道&#xff0c;网站开发中有时候需要将用户的请求从一个URL导向到另一个URL。比如说&#xff0c;你可能想将旧的URL结构…

Redis 数据结构和常用命令

* 代表多个&#xff0c;&#xff1f;代表一个 &#xff08;不用全部敲出来&#xff0c;按住tab可以自动补全&#xff09; -2是无效&#xff0c;-1是永久有效 &#xff1b;贴心小提示&#xff1a;内存非常宝贵&#xff0c;对于一些数据&#xff0c;我们应当给他一些过期时间&a…

计算机组成原理-总线概述

文章目录 总线简图总线的物理实现总览总线定义总线的特性总线的分类按数据格式分类串行总线并行总线 按总线功能分类注意系统总线的进一步分类 总线的结构单总线的机构双总线的结构三总线的结构四总线的结构 小结 总线简图 总线的物理实现 如果该为数据总线&#xff0c;那么当…

Hive详解、配置、数据结构、Hive CLI

一、Hive 认识 1. Hive 应用 问题&#xff1a;公司的经营状况&#xff1f; 主题一&#xff1a;财务现金流指标1.1&#xff1a;净现金流入/流出量指标1.2&#xff1a;现金转换周期预算执行状况指标2.1&#xff1a;预算内成本控制指标2.2&#xff1a;预算与实际支出的差异 主题…

图文证明 泰勒公式展开

泰勒公式 泰勒公式简单来说就是,可以用一个N次多项式来表示出一个连续可导的函数 f(x) 是一个用函数在某点的信息描述其附近取值的公式 第一步 思考 这是一个sin(x)的图像 用函数在原点的信息描述其附近取值 用一阶导数贴合: 直接用切线来贴合就好 画一个点(0,sin(0)除的切…

[NISACTF 2022]babyupload

[NISACTF 2022]babyupload wp 信息搜集 进入页面&#xff1a; 尝试文件上传&#xff0c;但是各种后缀名我都试过了&#xff0c;过不去。 在源码中发现提示&#xff0c;存在 ./source 路径&#xff1a; 访问该路径得到源码&#xff1a; from flask import Flask, request, r…

《深入理解C++11:C++11新特性解析与应用》笔记六

第六章 提高性能及操作硬件的能力 6.1 常量表达式 6.1.1 运行时常量性与编译时常量性 大多数情况下&#xff0c;const描述的是运行时常量性&#xff0c;也即是运行时数据的不可更改性。但有时候我们需要的却是编译时的常量性&#xff0c;这是const关键字无法保证的。例如&am…

精品Nodejs实现的在线菜谱食谱美食学习系统的设计与实现

《[含文档PPT源码等]精品Nodejs实现的在线菜谱学习系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows…

day5--java基础编程:异常,内部类

6 异常 6.1 异常概述 出现背景&#xff1a; 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如:客户输入数据的格式&#xff0c…

技术博客官网也是一个不错的学习平台(第411篇)

技术博客官网也是一个不错的学习平台(第411篇) 今天的主题是OSPF 大纲 技术成就梦想51CTO-中国知名的数字化人才学习平台和技术社区 OSPF 概念型问题_wx655f0abb3511b的技术博客_51CTO博客 OSPF协议介绍及配置 - airoot - 博客园 (cnblogs.com) 一、OSPF概述 回顾一下距离矢…

图片处理软件,批量缩放图片尺寸

无论是社交媒体上的分享&#xff0c;还是工作中的图片素材&#xff0c;往往大小不一、形状不同&#xff0c;这时如何批量高效地对这些图片进行缩放就显得尤为重要。传统的图片处理软件&#xff0c;不仅操作复杂&#xff0c;而且处理速度慢&#xff0c;更无法实现批量化处理。但…