Climbing Stairs

1,题目要求

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?

Note: Given n will be a positive integer.

你正在爬楼梯。 它需要n步才能达到顶峰。

每次你可以爬1或2步。 您可以通过多少不同的方式登顶?

注意:给定n将是一个正整数。
Climbing Stairs_第1张图片

2,题目思路

这道题,是比较经典的动态规划问题“爬楼梯”问题。

设置一个dp数组,其中每一位表示当前的楼梯有多少种走的情况:

  • dp[0],表示第一个台阶的可走的次数,即1;
  • dp[1],表示第二个台阶的可走的次数,即2(1+1或2);
  • dp[2],则表示第三个台阶可走的次数,则等于dp[0] + dp[1](一次走一个台阶或一次走两个台阶)
  • dp[i] = dp[i-1] + dp[i-2];

3,代码实现

int x = []() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    return 0;
}();

class Solution {
public:
    int climbStairs(int n) {
        if(n<2)
            return n;
        vector<int> dp (n, 0);
        dp[0] = 1;
        dp[1] = 2;
        for(int i = 2;i<n;i++){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n-1];
    }
};

你可能感兴趣的:(C++OJ,LeetCode,LeetCode,Top100,Liked,Question,Self-Culture,LeetCode,TopInterview,Question,Top,100,Liked,Questions,Top,Interview,Questions)