LeetCode 70 爬楼梯

LeetCode 70 爬楼梯

🟢简单

https://leetcode.cn/problems/climbing-stairs/

容易想到如下代码:

class Solution {

public:

    int climbStairs(int n) {

        if(n==0) return 1;

        if(n==1) return 1;

        return climbStairs(n-1)+climbStairs(n-2);

    }

};

备忘递归

class Solution {

public:

    vector<int> dp;

    int re(int n) {

        if(n==0) return 1;

        if(n==1) return 1;

        if(dp[n]!=-1) return dp[n];

        dp[n] = re(n-1)+re(n-2);

        return dp[n];

    }

    int climbStairs(int n) {

        dp = vector<int>(n+1,-1);

        return re(n);

    }

};

改成动态规划

class Solution {

public:

    int climbStairs(int n) {

        if(n<=1) return 1;

        int pre_pre = 1;

        int pre = 1;

        for(int i = 2;i<=n;i++){

            int tmp = pre;

            pre = pre+pre_pre;

            pre_pre = tmp;

        }

        return pre;

    }

};