大家好!我是曾续缘😇
今天是《LeetCode 热题 100》系列
发车第 81 天
动态规划第 1 题
❤️点赞 👍 收藏 ⭐再看,养成习惯
假设你正在爬楼梯。需要
n
阶你才能到达楼顶。每次你可以爬
1
或2
个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶示例 2:
输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶提示:
难度:❤️
1 <= n <= 45
解题方法
这是一个动态规划问题,我们可以使用一个数组f
来存储爬到每一阶楼梯的方法数。
数组f的长度为n+2
,初始化为0
。
将数组f
的第一个元素设为1
,表示爬到第0
阶楼梯只有一种方法(即不爬)。
然后遍历数组f
,对于每个元素f[i]
,将其加到f[i+1]
和f[i+2]
上,表示从第i
阶楼梯可以爬到第i+1
阶和第i+2
阶。
最后返回数组f
中的最后一个元素,即为爬到第n
阶楼梯的方法数。
Code
查看代码
java
public class Solution {
public int climbStairs(int n) {
// 创建一个长度为n+2的数组f,用于存储爬到每一阶楼梯的方法数
int[] f = new int[n + 2];
// 将数组f的所有元素初始化为0
Arrays.fill(f, 0);
// 将数组f的第一个元素设为1,表示爬到第0阶楼梯只有一种方法(即不爬)
f[0] = 1;
for (int i = 0; i < n; i++) {
f[i + 1] += f[i];
f[i + 2] += f[i];
}
// 返回数组f中的最后一个元素,即为爬到第n阶楼梯的方法数
return f[n];
}
}