题意:
每次迈步可以跨越1或2个台阶,问爬n阶台阶的方案有几种。
思路:
简单的dp题,dp[i]表示爬n阶台阶的方案数,则dp[i] = dp[i - 1] + dp[i - 2]。而且为了优化空间,dp数组可以滚动。
代码:
class Solution {
public:
int climbStairs(int n) {
int dp[3];
dp[1] = dp[2] = 0;
dp[0] = 1;
for (int i = 0; i < n; ++i) {
int tmp = dp[i % 3];
dp[i % 3] = 0;
dp[(i + 1) % 3] += tmp;
dp[(i + 2) % 3] += tmp;
}
return dp[n % 3];
}
};