【LeetCode力扣】70. 爬楼梯 (简单)

目录

1、题目介绍

2、解题

2.1、解题思路

2.2、图解说明

2.3、解题代码 

(1)滚动数组(用的是c语言)

(2)递归(用的是c语言)

1、题目介绍

原题链接:70. 爬楼梯 - 力扣(LeetCode)

示例 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

2、解题

2.1、解题思路

我们可以用F(n)来表示爬到第n个阶梯的总方案数,因为一次可以上1或2个阶梯,所以最后一步可能跨了1个台阶,也可能跨了2个台阶;意思就是最后一步可能是从第n-1个台阶跨到了第n个台阶,或者是从第n-2个台阶跨到了第n个台阶;

根据上面的分析,我们可以看出爬到第n个阶梯的方案可以分为两个大部分:                          (1)可以先用能达到第n-1个阶梯的总方案爬到第n-1个阶梯后,再跨个阶梯达到第n个阶梯;这一大部分的方案总数就是能达到第n-1个阶梯的总方案,即F(n-1)                            (2)可以先用能达到第n-2个阶梯的总方案爬到第n-2个阶梯后,再跨个阶梯达到第n个阶梯;这一大部分的方案总数就是能达到第n-2个阶梯的总方案,即F(n-2)

所以爬到第n个阶梯的总方案数:F(n) = F(n-1) + F(n-2)

2.2、图解说明

提示:在下图,中四角星代表一步;五角星代表两步;红色方框里为F(n-2)的总方案;蓝色方框里为F(n-1)的总方案

到第1阶梯有一个方案:一步

 到第2阶梯有两个方案:一步+一步;两步

  到第3阶梯有三个方案:F(1)里的方案各加两步 {一步+两步}  +  F(2)里的方案各加一步 {一步+一步+一步; 两步+一步}

  即F(3) = F(1) + F(2)

 到第4阶梯有五个方案:F(2)里的方案各加两步 {一步+一步+两步; 两步+两步}  +  F(3)里的方案各加一步 {一步+两步+一步; 一步+一步+一步+一步; 两步+一步+一步}

  即F(4) = F(2) + F(3)

 

到第5阶梯有八个方案:F(3)里的方案各加两步 {一步+两步+两步; 一步+一步+一步+两步; 两步+一步+两步}  +  F(4)里的方案各加一步 {一步+一步+两步+一步; 两步+两步+一步; 一步+两步+一步+一步; 一步+一步+一步+一步+一步; 两步+一步+一步+一步}

  即F(5) = F(3) + F(4)

2.3、解题代码 

(1)滚动数组(用的是c语言)

int climbStairs(int n){
    int a = 0, b = 0, c = 1;
    for(int i = 1; i <= n; i++){
        a = b;
        b = c;
        c = a + b;
    }
    return c;
}

通过了 

(2)递归(用的是c语言)

int sum(int n){
    if(n == 1){
        return 1;
    } else if(n == 2){
        return 2;
    }
    return sum(n-1)+sum(n-2);
}

int climbStairs(int n){
   return sum(n);
}

 我们运行代码是可以解题的,但是这道题用递归这个方法会超时

 【LeetCode力扣】相关:

【LeetCode力扣】86.分隔链表-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/133972240?spm=1001.2014.3001.5502【LeetCode力扣】75.颜色分类———快速排序子过程(荷兰国旗问题)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/133870075?spm=1001.2014.3001.5502 算法相关:

【数据结构与算法】快速排序及其优化(随机划分值)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/133959987?spm=1001.2014.3001.5502

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值