70 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
提示:
1 <= n <= 45
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/climbing-stairs
解决方案:
提供思路
解题思路挺多的,下面给出一种比较简单有效,切时间空间复杂度中等的
用f(n)表示到达第n个台阶的方案数。方案的计算如下。
·当n=0时,规定f(0)=1,表示当n=0时只有停在起点一种方案。
·当n=1时,由于每次至少爬 1 个台阶,因此到达第 1 个台阶只有一种方案,f(1)=1。
·当n≥2时,可以从第 n−1个台阶一次爬 1 个台阶到达第 n 个台阶,也可以从第 n−2 个台阶一次爬 2 个台阶到达第 n 个台阶,因此f(n)=f(n-1)+f(n-2)。
此处发现没,和斐波拉契数列像不像?
上代码:
public class Solution {
IDictionary<int, int> memo = new Dictionary<int, int>();
public int ClimbStairs(int n) {
if (n <= 1) {
return 1;
}
if (!memo.ContainsKey(n)) {
memo.Add(n, ClimbStairs(n - 1) + ClimbStairs(n - 2));
}
return memo[n];
}
}
以上是碰到的第七十题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!