1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public int climbStairs(int n, int m) {
//定義dp數組: dp[j]表示爬上j層樓梯,每一次最大可爬m階樓梯,總共有多少中方法爬到j層
int[] dp = new int[n + 1];
//初始化dp[]
dp[0] = 1;
//遍歷順序
//求排列問題,所以先遍歷背包,後遍歷物品
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= m; i++) {
//每次選擇爬的層數i不能超過樓梯總層數j
if (j >= i) {
//遞推公式
dp[j] += dp[j - j];
}
}
}
return dp[n];
}
|