70_爬楼梯

news/2024/10/24 18:59:26

70_爬楼梯

【问题描述】

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

【算法设计思想】

  1. 定义状态
    • 状态是指问题的一个特定阶段的状态。对于“爬楼梯”问题,状态可以定义为 dp[i],表示到达第 i 阶楼梯的方法数。
  2. 确定状态转移方程
    • 状态转移方程描述了如何从一个或多个先前的状态转移到当前状态。对于“爬楼梯”问题,状态转移方程为 dp[i] = dp[i - 1] + dp[i - 2],表示到达第 i 阶楼梯的方法数等于到达第 (i-1) 阶楼梯的方法数加上到达第 (i-2) 阶楼梯的方法数。
  3. 初始化
    • 初始化一些基本情况,以便开始递推计算。对于“爬楼梯”问题,初始化 dp[1] = 1dp[2] = 2,表示到达第1阶楼梯有一种方法,到达第2阶楼梯有两种方法。
  4. 确定计算顺序
    • 确定状态的计算顺序,通常是从已知状态逐步推导到最终状态。对于“爬楼梯”问题,计算顺序是从 i = 3 开始,逐步计算到 i = n
  5. 返回结果
    • 最后返回所需的最终结果。对于“爬楼梯”问题,返回 dp[n],即到达第 n 阶楼梯的方法数。

【算法描述】

C++:

class Solution {
public:int climbStairs(int n) {// 如果楼梯只有1阶,那么只有一种爬法,直接返回1if (n == 1) return 1;// 如果楼梯有2阶,那么有两种爬法:一次爬1阶两次,或者一次爬2阶,直接返回2if (n == 2) return 2;// 创建一个大小为n+1的数组dp,用于存储从第0阶到第n阶的爬法数量int dp[n + 1];// 初始化dp数组的前几个值dp[0] = 0; // 从第0阶开始,没有爬法dp[1] = 1; // 从第1阶开始,只有一种爬法dp[2] = 2; // 从第2阶开始,有两种爬法// 从第3阶开始,使用动态规划计算每一阶的爬法数量for (int i = 3; i <= n; i++) {// 到达第i阶的爬法数量等于到达第(i-1)阶的爬法数量加上到达第(i-2)阶的爬法数量dp[i] = dp[i - 1] + dp[i - 2];}// 返回到达第n阶的爬法数量return dp[n];}
};

Java:

class Solution {public int climbStairs(int n) {// 如果楼梯只有1阶,那么只有一种爬法,直接返回1if (n == 1) {return 1;}// 如果楼梯有2阶,那么有两种爬法:一次爬1阶两次,或者一次爬2阶,直接返回2if (n == 2) {return 2;}// 创建一个大小为n+1的数组dp,用于存储从第0阶到第n阶的爬法数量int[] dp = new int[n + 1];// 初始化dp数组的前几个值dp[1] = 1; // 从第1阶开始,只有一种爬法dp[2] = 2; // 从第2阶开始,有两种爬法// 从第3阶开始,使用动态规划计算每一阶的爬法数量for (int i = 3; i <= n; i++) {// 到达第i阶的爬法数量等于到达第(i-1)阶的爬法数量加上到达第(i-2)阶的爬法数量dp[i] = dp[i - 1] + dp[i - 2];}// 返回到达第n阶的爬法数量return dp[n];}
}

Python:

class Solution:def climbStairs(self, n: int) -> int:# 创建一个大小为n+1的列表dp,用于存储从第0阶到第n阶的爬法数量dp = [0] * (n + 1)# 如果楼梯只有0阶,根据题目假设,返回0(实际上这种情况可能不需要处理)if n == 0:return 0# 如果楼梯只有1阶,那么只有一种爬法,直接返回1if n == 1:return 1# 如果楼梯有2阶,那么有两种爬法:一次爬1阶两次,或者一次爬2阶,直接返回2if n == 2:return 2# 初始化dp数组的前几个值dp[0] = 0  # 从第0阶开始,没有爬法dp[1] = 1  # 从第1阶开始,只有一种爬法dp[2] = 2  # 从第2阶开始,有两种爬法# 从第3阶开始,使用动态规划计算每一阶的爬法数量for i in range(3, n + 1):# 到达第i阶的爬法数量等于到达第(i-1)阶的爬法数量加上到达第(i-2)阶的爬法数量dp[i] = dp[i - 1] + dp[i - 2]# 返回到达第n阶的爬法数量return dp[n]

C:

int climbStairs(int n) {// 如果楼梯只有1阶,那么只有一种爬法,直接返回1if (n == 1) return 1;// 如果楼梯有2阶,那么有两种爬法:一次爬1阶两次,或者一次爬2阶,直接返回2if (n == 2) return 2;// 创建一个大小为n+1的数组dp,用于存储从第0阶到第n阶的爬法数量int dp[n + 1];// 初始化dp数组的前几个值dp[0] = 0; // 从第0阶开始,没有爬法dp[1] = 1; // 从第1阶开始,只有一种爬法dp[2] = 2; // 从第2阶开始,有两种爬法// 从第3阶开始,使用动态规划计算每一阶的爬法数量for (int i = 3; i <= n; i++) {// 到达第i阶的爬法数量等于到达第(i-1)阶的爬法数量加上到达第(i-2)阶的爬法数量dp[i] = dp[i - 1] + dp[i - 2];}// 返回到达第n阶的爬法数量return dp[n];
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

苹果CMS v10 忘记管理员密码的重置方法

如果你忘记了苹果CMS v10的后台管理密码,可以通过以下步骤进行重置:备份数据库:在进行任何数据库操作之前,请确保备份当前的数据库,以防止数据丢失。登录数据库:使用数据库管理工具(如phpMyAdmin)登录到你的数据库。如果你使用的是宝塔面板,可以通过宝塔面板的数据库管…

码上狂欢 | 1024程序员节,免费领取你的技能加油包!

​祝程序员们节日快乐! 今天是10月24日,一个特别的日子——程序员节。在这个节日,我们聊聊程序员比较热门的职业发展方向。 对于有理工科背景的程序员来说,有两个方向是非常有发展前景的。所谓前景,就是岗位多、薪资高、未来前途广阔,适合作为长远职业规划的方向。这两个…

DedeCMS后台管理员密码忘记的解决方法

如果你忘记了DedeCMS的后台管理密码,可以通过以下步骤进行重置:备份数据库:在进行任何数据库操作之前,请确保备份当前的数据库,以防止数据丢失。登录数据库:使用数据库管理工具(如phpMyAdmin)登录到你的数据库。找到用户表:寻找名为 dede_admin 的表,这是存储管理员账…

firewall-cmd - 防火墙规则管理工具

firewall-cmd - 防火墙规则管理工具 原创 点击关注-> 奶嘴很忙2024年09月13日 06:01 广东1、简介 firewall-cmd 是一个用于管理防火墙规则的命令行工具。它是 firewalld 服务的主要命令行接口,用于配置和控制防火墙规则。firewall-cmd 允许系统管理员动态地添加、删除和修改…

Robust Loop Closure by Textual Cues in Challenging Environments

arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 【Robust Loop Closure by Textual Cues in Challenging Environments】 文章链接:[2410.15869] Robust Loop Closure by Textual Cues i... 开源仓库:GitHub - TongxingJin/TXTLCD: This repository is…

ZetCode-GUI-教程-九-

ZetCode GUI 教程(九)原文:ZetCode 协议:CC BY-NC-SA 4.0wxWidgets 中的布局管理原文: http://zetcode.com/gui/wxwidgets/layoutmanagement/典型的应用由各种小部件组成。 这些小部件放置在容器小部件内。 程序员必须管理应用的布局。 这不是一件容易的事。 在 wxWidgets…

ZetCode-PHP-教程-一-

ZetCode PHP 教程(一)原文:ZetCode 协议:CC BY-NC-SA 4.0PHP 教程原文: https://zetcode.com/lang/php/这是 PHP 教程。 本教程涵盖了 PHP 编程语言的核心。 它使用 PHP CLI。 PHP 教程适合初学者。 目录PHP 语言 词法结构 基础知识 数据类型 字符串 运算符 控制流 数组 数…