LeetCode算法系列:70. Climbing Stairs

版权声明:由于一些问题,理论类博客放到了blogger上,希望各位看官莅临指教https://efanbh.blogspot.com/;本文为博主原创文章,转载请注明本文来源 https://blog.csdn.net/wyf826459/article/details/82751990

题目描述


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.

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

算法实现

比较简单,动态规划或者递归,因为动态规划效率更高,优选动态规划

R(n) = R(n - 1) + R(n - 2);

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

猜你喜欢

转载自blog.csdn.net/wyf826459/article/details/82751990