Climbing Stairs
原题链接Climbing Stairs
找到有多少个组合的和是给定的n,要求组合中的每个数字只能是1和2
动态规划即可
代码如下
class Solution {
public:
int climbStairs(int n) {
vector<int> dp(n + 1);
dp[0] = dp[1] = 1;
/* 当前的位置只能由前一个位置移动一步,或者前前位置移动两步到达 */
/* dp[i]表示从开始达到i位置有多少种可能 */
for(int i = 2; i <= n; ++i)
dp[i] = dp[i - 1] + dp[i - 2];
return dp[n];
}
};
像这种每个当前状态由以前的状态决定(或者说当前状态决定之后的状态)的问题都可以用动态规划解决,不过需要分析动态规划数组应该表示什么。