趣味算法题

越刷越上头的趣味算法题
帅旋
关注
充电
IT宅站长,技术博主,架构师,全网id:arthinking。

动态规划经典案例:爬楼梯

发布于 2024-03-13 | 更新于 2024-08-21

题目:70. 爬楼梯[1]

如果您已经有思路了,或者是N刷了,可以先自己写一遍。

题目分析

题目说明:假设你正在爬楼梯,需要 n 步你才能到达顶部,每次你可以爬 1 或 2 个台阶,你有多少种不同的方法可以爬到楼顶呢?

这个问题的关键在于理解,到达第 n 阶的方法数量是到达第 n-1 阶和第 n-2 阶的方法数之和,因为到达第 n 阶的最后一步要么是从第 n-1 阶上来的,要么是从第 n-2 阶上来的。

解题思路

我们可以使用动态规划(Dynamic Programming,DP)技术来解决这个问题。

动态规划是一种解决复杂问题的方法,它将问题分解为更小的子问题,并先解决这些子问题,然后合并这些子问题的解决方案来解决原始问题。

具体做法:创建一个数组来存储到达每一阶梯的方法数,然后逐步构建这个数组。

Java解法

下面是使用Java语言的解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution {
public int climbStairs(int n) {
if (n == 1) {
return 1;
}

// 创建一个数组来存储到达每一阶梯的方法数
int[] dp = new int[n + 1];
// 初始化前两个值
dp[1] = 1;
dp[2] = 2;

// 从第 3 阶开始计算到达每一阶的方法数
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}

// 返回到达第 n 阶的方法数
return dp[n];
}
}

通过这种方式,我们能够在 O(n) 的时间复杂度内找到到达楼顶的方法数,其中 n 是楼梯的阶数。

References


  1. 70. 爬楼梯. Retrieved from https://leetcode.cn/problems/climbing-stairs/ ↩︎

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/algorithm/climbing-stairs.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。

请帅旋喝一杯咖啡

咖啡=电量,给帅旋充杯咖啡,他会满电写代码!

IT宅

关注公众号及时获取网站内容更新。