每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?
台阶作为背包,爬几个台阶作为物体,在台阶为n时,塞任意多个台阶的方法是多少
思路
- dp数组定义:在爬到j个台阶前,使用m个物品做填充,可以有dp[j]种方法
- 递推公式:dp[i] += dp[i - j];
- dp数组初始化:dp[0] = 1;
- 遍历顺序:先背包再物品
- 时间复杂度:
代码
class Solution {
public:int climbStairs(int n) {int m = 2;vector<int> dp(n+1, 0);dp[0] = 1;for(int i = 1; i <= n;i++){for(int j = 1; j <= m && i - j >= 0;j++){dp[i] += dp[i - j];}}return dp[n];}
};