题目描述:
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
解题思路:使用动态规划,状态dp[i]表示从第1个台阶到第i个台阶不同走法的数目,由于每次只能1个台阶或两个台阶,
所以状态转移方程为:dp[i]=dp[i-1]+dp[i-2],最后状态dp[n]即为所求
AC代码如下:
class Solution {
public:
int climbStairs(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
if (n == 2) return 2;
vector<int> dp(n+1, 0);
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; ++i){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
};