LeetCode 70 Climbing Stairs

题意:

每次迈步可以跨越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];
    }
};


你可能感兴趣的:(LeetCode,DP,LeetCode,DP)