c语言一个n阶楼梯,你站在底部,每次你可以选择走1阶或者两阶,问:你走到楼梯顶部有多少种走法?
时间: 2024-05-10 12:21:08 浏览: 135
这道题可以使用递归或动态规划来解决。
递归解法:
```
int climbStairs(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return climbStairs(n-1) + climbStairs(n-2);
}
```
动态规划解法:
```
int climbStairs(int n) {
int dp[n+1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
```
其中,dp数组保存了到达每一阶楼梯的走法总数。初始时,dp[0]和dp[1]都为1,因为到达第0阶和第1阶楼梯只有一种走法,即不走或只走一步。接着,从第2阶楼梯开始,每一阶楼梯的走法总数等于前两阶楼梯的走法总数之和,即dp[i] = dp[i-1] + dp[i-2]。最终,dp[n]就是到达楼梯顶部的走法总数。
阅读全文