爬楼梯 三种算法比较

news/2025/3/9 15:12:13/文章来源:https://www.cnblogs.com/SIPnnnnn/p/18760777
 1 /*
 2     假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 3     每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
 4 
 5     示例 1:
 6     输入:n = 2
 7     输出:2
 8     解释:有两种方法可以爬到楼顶。
 9     1.     1 阶 + 1 阶
10     2.     2 阶
11 
12     示例 2:
13     输入:n = 3
14     输出:3
15     解释:有三种方法可以爬到楼顶。
16     1.     1 阶 + 1 阶 + 1 阶
17     2.     1 阶 + 2 阶
18     3.     2 阶 + 1 阶
19 */
20 
21 // 方法一:递归方法,类似递归形式的斐波那契数列,时间复杂度:O(2**n),空间复杂度:O(n)
22 
23 // 方法二:记忆化递归方法,时间复杂度:O(n),O(n)
24 #include <iostream>
25 #include <cstdio>
26 using namespace std;
27 
28 int climbStairsMemo(int n, int memo[]) {
29     if (memo[n] > 0) {
30         return memo[n];
31     }
32     if (n == 1) memo[n] = 1;
33     else if (n == 2) memo[n] = 2;
34     else memo[n] = climbStairsMemo(n - 1, memo) + climbStairsMemo(n - 2, memo);
35     return memo[n];
36 }
37 
38 int climbStairs2(int n) {
39     int memo[n + 1];
40     return climbStairsMemo(n, memo);
41 
42 }
43 
44 
45 // 方法三:动态规划,时间复杂度:O(n),O(n)
46 int climebStairs3(int n) {
47     if (n == 1) return 1;
48     int dp[n + 1];
49     dp[1] = 1;
50     dp[2] = 2;
51 
52     for (int i = 3; i <= n; i++) {
53         dp[i] = dp[i - 1] + dp[i - 2];
54     }
55 
56     return dp[n];
57 }
58 
59 // 方法四:
60 /*
61     可以发现,方法三在计算 dp[i] 时,实际上只需要用到 dp[i - 1] 和 dp[i - 2] 的值,并不需要存储整个数组 dp。
62     因此,可以使用常数级的额外空间来优化这段代码,将空间复杂度降低到 O(1)。以下是优化后的代码:
63 */
64 int climbStairs4(int n) {
65     if (n == 1) return 1;
66     int first = 1;
67     int second = 2;
68     int third;
69 
70     for (int i = 3; i <= n; i++) {
71         third = first + second;
72         first = second;
73         second = third;
74     }
75 
76     return second;
77 }
78 
79 int main() {
80 
81 
82 
83     return 0;
84 }
爬楼梯 三种算法比较

 

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

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

相关文章

从零开始:4G模组Air780EPM的串口电路设计及硬件指导!

串口作为Air780EPM模块的核心通信接口,承担着设备控制、数据传输及外设交互等关键功能,在物联网终端、智能设备、工业自动化等场景中不可或缺。 一、概述 串口作为 Air780EPM 模块最最主要的通信接口,承担着控制,数据传输,外设通信等重要功能。基本上绝大部分的 Cat.1 应用…

实验1C语言开发环境使用和数据类型,运算符,表达式

实验1 task1.c 代码:#include <stdio.h> #include <stdlib.h> int main() {printf(" O \n");printf("<H>\n");printf(" I \n");printf(" O \n");printf("<H>\n");printf(" I \n");syste…

python44页图

红色五角星 from turtle import * fillcolor("red") begin_fill() while True:forward(200)right(144)if abs(pos())<1:break end_fill() 太阳花 from turtle import* color(red,yello) begin_fill() while True:forward(200)left(170)if abs(pos())<1:break e…

ChatBI≠NL2SQL:关于问数,聊聊我踩过的坑和一点感悟

"如果说数据是新时代的石油,智能问数就是能让普通人也能操作的智能钻井平台。"这里是**AI粉嫩特攻队!** ,这段时间真的太忙了,不过放心,关于从零打造AI工具的coze实操下篇正在进行中。今天,我们先聊聊另一个很热闹的主题——ChatBI。 还记得那些陷入Excel地狱的…

DP dynamic programming

DP (Dynamic Programming)动态规划常用模型 背包 01背包问题描述:有N个物体,容量为v的背包,每个物品有两个属性体积V和价值W 每件物品只能用一次 背包能装得下的情况下,背包里的价值最大是多少? 完全背包 每件物品有无限个多重背包 每个物品最多有si个 分组背包 物品…

普通人别老想搞独立游戏开发,先做小产品试试吧

前段时间和几个老朋友吃饭,有个老哥酒喝多人给我说他一直有一个梦想,就说做一款独立游戏然后上线,现在准备开始行动了怎么怎么,最后我们扯了很久.....成功劝退了老哥😓。 一、独立游戏开发:英雄主义的代价,普通人的绝路成本高到离谱:从“用爱发电”到“家破人亡”人力…

PTE Hook及x64分页机制的研究

什么是PTE Hook 常规的inlineHook思路是直接修改目标函数的代码,使其先执行我们自己的函数,再跳转回来执行原函数。这种Hook是全局的,即Windows中每一个进程一旦调用被Hook的函数,就会受到我们的影响,也很容易被PatchGuard检查到。 因此提出一种新的Hook思路,隔离具体进程…

.net core/IIS/Kestrel 大文件上传大小设置

MultipartBodyLengthLimit 设置每个多部分正文的长度限制。 分析超出此限制的窗体部分时,会引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices 设置自定义此限制:public void ConfigureServices(I…

RHEL8操作系统安装方法

目录第一步:打开VMware软件,创建我们的虚拟机(也就是创建一台虚拟的电脑)第二步 载入rhel8版本的iso文件,进行操作系统的安装 第一步:打开VMware软件,创建我们的虚拟机(也就是创建一台虚拟的电脑)说明:这里使用的是NAT网络模式,可以上网,这三种网络的模式讲解可以看…

关于USB声卡导致windows无法自动关闭屏幕或休眠的案例

问题描述:本人买了一台漫步者S880MKII使用自带的type-C线插到笔记本上后,win11系统的超时息屏和超时睡眠功能失效。解决方法:打开设备管理器(图1) 找到以下输出设备,点击事件查看到类似“VID_20B1”信息的设备 (图2) 禁用设备(图3)至此,睡眠功能恢复正常。 注:有副…