问题是
“你正在爬楼梯。每次你可以做一步或两步。楼梯有n步。你有多少不同的方式可以爬楼梯?”
以下是此问题的代码解决方案,但我无法理解它。任何人都可以解释我
int stairs(int n) {
if (n == 0) return 0;
int a = 1;
int b = 1;
for (int i = 1; i < n; i++) {
int c = a;
a = b;
b += c;
}
return b;
}
谢谢,
答案 0 :(得分:11)
嗯,首先你需要了解递归公式,以及我们如何从中推导出迭代公式。
递归公式为:
f(n) = f(n-1) + f(n-2)
f(0) = f(1) = 1
(f(n-1)
为一步,f(n-2)
为两步,总数是使用这些选项之一的方式数 - 因此总和)。
如果仔细观察 - 这也是一个众所周知的系列 - fibonacci numbers,解决方案只是计算每个数字,而不是一遍又一遍地重新计算递归,导致更多有效的解决方案。
答案 1 :(得分:0)
使用DP爬楼梯
class Solution {
public:
int climbStairs(int n) {
int dp[n+1];
if (n <= 1)
return 1;
if (n ==2)
return 2;
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <=n; i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}};