news 2026/4/28 9:14:35

代码随想录 70.爬楼梯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 70.爬楼梯

思路:爬到第一层有1种方法,爬到第二层有2种方法。那么第一层楼梯再跨两步就到第三层,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由第二层楼梯和第一层楼梯的状态推导出来,所以可以动态规划。

动规五部曲:

本题需要一个一维数组来记录不同楼层的状态。

1.确定dp数组及其下标的含义:

dp[i]:爬到第i层楼梯,有dp[i]种方法。

2.确定递推公式:

如何可以推出dp[i]呢?从dp[i]的定义来看,dp[i]可以有两个方向推出来。

(1)首先是dp[i - 1],上i - 1层楼梯,有dp[i - 1]种方法,那么下一步上1个台阶就到dp[i]了。

(2)还有dp[i - 2],上i - 2层楼梯,有dp[i - 2]种方法,那么下一步上2个台阶就到dp[i]了。

因此dp[i]就是dp[i - 1]和dp[i - 2]的和。

dp[i] = dp[i - 1] + dp[i - 2]。

在推导dp[i]的时候,一定要时刻想着dp[i]的定义,否则容易跑偏。这体现出确定dp数组及其下标含义的重要性。

3.dp数组如何初始化:

dp[i]的含义是,爬到第i层楼梯,有dp[i]种方法。

那么i为0时,dp[i]应该为多少?在本题中,i为0时,dp[0] = 0 或 dp[0] = 1有争议。这是因为第0层台阶,既可以解释为爬到第0层也是一种方法,所以dp[0] = 1;也可以解释为dp[0]时楼层是0,直接站在楼顶上了没有移动,所以dp[0] = 0。在本题中,n是一个正整数,所以题目中没有n为0的情况。所以本题不需要讨论dp[0]的初始化。而本题中,dp[1] = 1,dp[2] = 2是没有争议的。所以本题不考虑dp[0]如何初始化,只初始化dp[1] = 1,dp[2] = 2,然后从i = 3开始递推,这样才符合dp[i]的定义

4.确定遍历顺序:

从递推公式 dp[i] = dp[i - 1] + dp[i - 2]可以得出,遍历顺序是从前向后的。

5.举例推导dp数组:

当n为5时,dp数组如下所示。

附代码:

class Solution { public int climbStairs(int n) { if(n <= 2) return n; int[] dp = new int[n + 1]; dp[1] = 1; dp[2] = 2; for(int i = 3;i <= n;i++){ dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } }
//用变量记录代替数组 class Solution { public int climbStairs(int n) { if(n <= 2) return n; int a = 1,b = 2,sum = 0; for(int i = 3;i <= n;i++){ sum = a + b; a = b; b = sum; } return b; } }

ACM模式:

import java.util.Scanner; class Solution { public int climbStairs(int n) { if (n <= 2) return n; int[] dp = new int[n + 1]; dp[1] = 1; dp[2] = 2; for (int i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取楼梯的阶数 int n = scanner.nextInt(); // 计算爬楼梯的方法数 Solution solution = new Solution(); int result = solution.climbStairs(n); System.out.println(result); scanner.close(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 9:06:57

OWL ADVENTURE效果深度评测:多模态理解能力实测报告

OWL ADVENTURE效果深度评测&#xff1a;多模态理解能力实测报告 最近多模态大模型领域真是热闹非凡&#xff0c;各种新模型层出不穷。今天咱们不聊那些耳熟能详的巨头&#xff0c;来深度看看一个相对低调但实力不俗的选手——OWL ADVENTURE。这个名字听起来就挺有意思&#xf…

作者头像 李华
网站建设 2026/4/28 9:01:09

如何深度优化NVIDIA显卡性能:NVIDIA Profile Inspector终极指南

如何深度优化NVIDIA显卡性能&#xff1a;NVIDIA Profile Inspector终极指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的开源工具&#xff0c;专为解锁NVIDIA显…

作者头像 李华
网站建设 2026/4/28 9:01:01

如何让旧Mac焕发新生?OpenCore Legacy Patcher终极指南

如何让旧Mac焕发新生&#xff1f;OpenCore Legacy Patcher终极指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老款Mac无法升级到最新macOS而烦…

作者头像 李华
网站建设 2026/4/28 8:46:32

nli-MiniLM2-L6-H768真实案例:某省级政务平台日均处理50万+文本分类请求

nli-MiniLM2-L6-H768真实案例&#xff1a;某省级政务平台日均处理50万文本分类请求 1. 项目背景与挑战 某省级政务服务平台每天需要处理超过50万条来自市民的咨询、投诉和建议文本。传统的人工分类方式效率低下&#xff0c;且随着业务量增长面临三大核心挑战&#xff1a; 时…

作者头像 李华