Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
70. 爬楼梯 - 力扣(LeetCode) (leetcode-cn.com)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 阶 + 1 阶
2. 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
提示:
- 1 <= n <= 45
二、思路分析:
这是一个斐波那契数列。先来分析一波:
- 假如爬楼梯的最后一步是走了1步,那么可能的情况是前n-1个台阶的排列组合。
- 假如爬楼梯的最后一步是走了2步,那么可能的情况是前n-2个台阶的排列组合。 由此,得出n个台阶的情况是x(n) = x(n-1) + x(n-2)。
可以看到这是一个递推数列,最后一层递推是x(3) = x(2) + x(1) = 2 + 1 = 3
由于公式到了n-2那一层,则n>=2,所以写代码时将n=1的情况拎出来单独返回,x(2) = x(1) + x(0) = 1 + 1 = 2就好了
三、AC 代码:
public int climbStairs(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
return climbStairs(n - 1) + climbStairs(n - 2);
}
四、总结:
初次接触动态规划,还是需要多比划比划。