三字诀:定—方—始
定:定义数组含义,确定最后一步完成情况(难度:⭐⭐⭐⭐⭐),肯定子问题成立
方:写表达式(就那个核心方程,难度:⭐⭐⭐)
始:给出初始条件
总之一句话:用数组去完成最后一步得出方程式,给出初始累代码
问题描述:
假设你正在爬楼梯。需要 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/climbing-stairs
分析:
定: 设steps[i]表示到第i个台阶去的不同方法数总和。
最后一步:1、从n-1处上一个台阶到达楼顶,有steps[n-1]种
2、从n-2处上两个台阶到达楼顶,有steps[n-2]种
所以最后一步:steps[n]=steps[n-1]+steps[n-2]
把n换i不就是子问题了嘛,完全肯定
方:steps[i]=steps[i-1]+steps[i-2]
始:当i<=2时,方程不成立,所以steps1]和steps[2]得给初始值,即steps[1]=1和steps[2]=2
累代码:
class Solution {
public:
int climbStairs(int n) {
int steps[46];
steps[1]=1;
steps[2]=2;
if(n>2)
for(int i=3;i<=n;i++)
steps[i]=steps[i-1]+steps[i-2];
return steps[n];
}
};
测试结果: