首页 > 其他分享 >LeeCode热题100(爬楼梯)

LeeCode热题100(爬楼梯)

时间:2024-06-02 10:59:49浏览次数:21  
标签:台阶 要么 最后 跨法 LeeCode 当先 就行了 100 热题

爬楼梯这个题我断断续续看了不下5遍,哪次看都是懵逼的,就会说是满足动态规划,满足斐波那契数列,也不说为什么。

本文一定让你明白怎么分析这个题的规律(利用数学的递推思想来分析),看不懂来打我,但是一定要自己动手画一画台阶写一下

注意:不论是多少个台阶,第一步就只有两种情况是吧:1步跨1个 or 1步跨2个

思路分析(从最后1个台阶倒着分析):

1.在最后1个台阶1种跨法:

2.最后2个台阶有2种跨法:

3.最后3个台阶有3种跨法:

4.最后4个台阶有5种跨法:

注意:上面几个图里面最左边的数字只表示第一步  跨1个台阶 or 1步跨2个台阶(不懂了看下面这个图)

分析最后3个台阶:第一步要么跨1个台阶要么跨2个台阶。当先跨1个台阶时是不是剩下(3-1)个台阶(把跨最后2个台阶的跨法搬过来就行了);当先跨2个台阶时是不是剩下(3-2)个台阶(把跨最后1个台阶的跨法搬过来就行了);

分析最后4个台阶:第一步要么跨1个台阶要么跨2个台阶。当先跨1个台阶时是不是剩下(4-1)个台阶(把跨最后3个台阶的跨法搬过来就行了);当先跨2个台阶时是不是剩下(4-2)个台阶(把跨最后2个台阶的跨法搬过来就行了);

分析最后5个台阶:第一步要么跨1个台阶要么跨2个台阶。当先跨1个台阶时是不是剩下(5-1)个台阶(把跨最后4个台阶的跨法搬过来就行了);当先跨2个台阶时是不是剩下(5-2)个台阶(把跨最后3个台阶的跨法搬过来就行了);

根据数学递推思想可以看出:最后n个台阶的跨法=(n-1)个台阶的跨法+(n-2)个台阶的跨法

既然分析出来与符合斐波那契数列规律是一样的,不妨拿过来斐波那契数列的代码就行了

class Solution {
    public int climbStairs(int n) {
if (n <= 1) return n; // 因为下面直接对dp[2]操作了,防止空指针
        int[]dp=new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) { // 注意i是从3开始的
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

标签:台阶,要么,最后,跨法,LeeCode,当先,就行了,100,热题
From: https://blog.csdn.net/2301_80484340/article/details/139369959

相关文章

  • AS-V1000视频监控接入平台:通过SDK接入宇视NVR及对应的网路摄像机(通道)
    目录一、AS-V1000视频监控平台介绍1、概述2、视频接入能力介绍3、功能介绍二、使用宇视的SDK接入宇视NVR1、添加宇视SDK设备类型(类型:宇视NVR)2、NVR的SDK设置​3、管理平台接入(1)添加设备入口(2)添加设备信息(3)添加NVR设备成功(4)设备能力4、添加通道三、接入后的用户和......
  • 反转21克msvcr100.dll丢失怎么办?反转21克msvcr100.dll丢失问题的全面解析与解决之道
    《反转21克》是目前第一款以科幻为题材的互动影像作品。然而很多玩家都遇到了反转21克msvcr100.dll丢失的问题,其中msvcr100.dll是MicrosoftVisualC++2010RedistributablePackage的一部分,它提供了运行时库支持,下面一起来看看解决方法介绍吧!重新安装相关程序重新安装与ms......
  • 力扣刷題---回文數 擊敗100%用戶的解法
    題目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例 2:输入:x=-121输出:false解释:从左向右读,为-121。从右......
  • 【华为OD】D卷真题100分:分割数组的最大差值 Java代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、python、C、C++代码实现:【华为OD】D卷真题100分:分割数组的最大差值JavaScript代码实现[思路+......
  • 揭秘男女聊天视频变现,轻松实现日入1000+!✨
    ......
  • (D卷,100分)- 约瑟夫问题(Java & JS & Python & C)
    获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。题目描述输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m......
  • Gym-100520A Andrew Stankevich Contest 45 A 题解
    AnalogousSetsGym-100520ASol1.集合生成函数将可重集合\(M\)映射为生成函数:\[F(M)=\sum_{m\inM}(\#m)\cdotx^m\]如果\(M\)的元素在\(\mathbbN\)上取值,那么,\(F(M)\)是多项式。2.\(\theta\)算子\[\theta(F)=x\cdotF'\]其中\(F'=\frac{dF}{dx}\)......
  • Leecode热题100--215:数组中的第k个最大值
    题目:给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。时间复杂度为O(n)的算法解法一:利用STL特性解题:#include<iostream>#include<vector>#include<algorithm>usingnamespac......
  • Leecode---栈---每日温度 / 最小栈及栈和队列的相互实现
    栈:先入后出;队列:先入先出一、每日温度Leecode—739题目:给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。单调栈思路:1、新建一个存储......
  • Leecode热题100---二分查找--4:寻找两个正序数组的中位数
    题目:给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。解法1、暴力解法(归并)思路:合并nums1,nums2为第三个数组排序第三个数组按下标,找出中位数classSolution{public: doublefindMedianSortedArrays(vec......