题目
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1、2、... 、m
个台阶。你有多少种不同的方法可以爬到楼顶呢?
解题方法
动态规划
由于爬楼梯的次数可以重复利用,最终需要达到的阶数是一定的,该问题可以描述为一个完全背包问题。背包容量为n
,物品为1-m
。设定动态数组dp[j]
表示爬到j
层的方法总数。则有如下递推关系:
C++代码:
class Solution {
public:
int climbstairs(int n) {
vector<int> dp[n+1, 0];
dp[0] = 1;
for(int i=0; i<=n; i++) {
for(int j=1; j<=m; j++) {
if(i>=j) dp[i] += dp[i-j];
}
}
return dp[n];
}
};