其他分享
首页 > 其他分享> > [递归+暂存] 力扣 70. 爬楼梯

[递归+暂存] 力扣 70. 爬楼梯

作者:互联网

70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:1<=n<=45

题解

使用递归解题,在递归函数solve中,传入left:剩余梯子数目,判断

可是仅这样会超时,如何改进呢?仅返回solve(left-1)+solve(left-2)的话,有的部分会重复计算,

如一开始n=5,5-1=4,5-2=3,4-1=3,...,当left为3时计算了两次

所以可以采用一个数组t去存每个梯子数组对应的方法数量,在返回的时候查表即可

代码
class Solution {
private:
int t[46]={0};//记录n个提数的方法
public:
    int solve(int left){//left:剩余梯子数量
        if(left==1)
            return 1;
        if(left==2)
            return 2;
        if(t[left-1]==0)//记录left-1
            t[left-1]=solve(left-1);
        if(t[left-2]==0)//记录
            t[left-2]=solve(left-2);
        return t[left-1]+t[left-2];//查表
    }
    int climbStairs(int n) {
        return solve(n);
    }
};

标签:爬楼梯,int,力扣,solve,70,return,梯子,方法,left
来源: https://www.cnblogs.com/fudanxi/p/16332018.html