LeetCode题:70爬楼梯,126斐波那契数

news2025/2/23 7:04:37

目录

70:爬楼梯

题目要求:

解题思路:(类似斐波那契数)

递归解法:

非递归解法:

126:斐波那契数

题目要求:

解题思路:

递归解法:

非递归解法:

都看到这了,点个赞再走呗,谢谢谢谢谢!!!


70:爬楼梯

题目要求:

解题思路:(类似斐波那契数)

递归解法:

由题可知,每次可以爬1个或者2个台阶,假如有n个台阶,会有多少种走法?那么我们就想,第一次爬一个台阶,那方法数就是爬这一次台阶加上剩下n-1个台阶的走法,爬两个台阶,那方法数就是爬完这两个台阶再加上剩下n-2个台阶的走法,很容易就想到递归的解法了,而使用递归我们要找到终止条件,也要写出递归公式

但是这么递归的时间复杂度很高,LeetCode上通过不了,会有很多重复计算的斐波那契数,我们可以用HashMap来解题,每次往下找之前都记录一下map里面有没有n这个斐波那契数,有就不用继续往下找了,直接返回这个斐波那契数,没有就继续往下找,有了HashMap的引用,我们时间复杂度就变成了O(N),在LeetCode上也就能通过了。

递归公式如下:

代码如下:

class Solution {
    HashMap<Integer, Integer> hashmap = new HashMap<>();
    public int climbStairs(int n) {
        if(n == 1) {
            return 1;
        }
        if(n == 2) {
            return 2;
        }
        //每次递归都判断map有没有n个台阶爬楼梯方法数,没有算出当前n阶台阶的方法数,放进map里,放进map里后就不用继续往下递归了,直接返回这个方法数,因为hashmap已经存了n阶台阶的方法数了;有就不用继续递归了,直接返回n台阶的方法数
        if(hashmap.get(n) != null) {
           return hashmap.get(n);
        } else {
            int result = climbStairs(n - 1) + climbStairs(n - 2);
            hashmap.put(n, result);
            return result;
        }
    }
}

非递归解法:

从此图我们可以看出,要求n的斐波那契数,必须求前一个和前两个的斐波那契数,也就是上图的公式,非递归的解法,我们就用循环来解决,从下至上来求n的斐波那契数,我们定义一个pre和prePre变量来记录前一个和前两个的斐波那契数,result来记录n的斐波那契数每循环一次都要更改pre和prePre的下标,时间复杂度为O(N).

代码如下:

 public int climbStairs(int n) {
         //非递归思想
         if(n == 1) {
             return 1;
         }
        if(n == 2) {
            return 2;
        }
        int result = 0;
        int pre = 2;
        int prePre = 1;
        for(int flg = 3; flg <= n; flg++) {
            result = pre + prePre;
            //pre和prePre都要往前推
            prePre = pre;
            pre = result;
        }
        return result;
    }

126:斐波那契数

题目要求:

解题思路:

        这题和爬楼梯思路一样,解法也一样,递归和非递归也一样,不过他的递归公式和结束条件和爬楼梯不一样,公式如下图:

递归思路:因为递归会重复计算很多次,所以我们可以用一个HashMap来记录n的斐波那契数每递归一次都判断map里面有没有n的斐波那契数,有就不用继续往下递归了,直接返回这个斐波那契数没有就往下递归,把1后面的斐波那契数列都记录在map中,这样时间复杂度就是O(N)了,LeetCode也能通过。

非递归思路:用循环,从下至上,求得每个斐波那契数我们定义result放n的斐波那契数,pre放n的前一个斐波那契数,prePre放n的前两个斐波那契数每循环一次都要更新一次pre和prePre的下标,往上走。

递归解法:

代码如下:

 Map<Integer, Integer> map = new HashMap<>();
    public int fib(int n) {
        if(n == 0 || n == 1) {
            return n;
        }
        if(map.containsKey(n)) {
            return map.get(n);
        }
        //n的斐波那契数不在map里
        int result = (fib(n - 1) + fib(n - 2)) % 1000000007;
        //int result = (fib(n - 1) + fib(n - 2));
        map.put(n, result);
        return result;
    }

非递归解法:

 public int fib(int n) {
        //非递归
        if(n == 0 || n == 1) {
            return n;
        }
        int result = 0;
        int pre = 1;
        int prePre = 0;
        for(int i = 2; i <= n; i++) {
            result = (pre + prePre) % 1000000007;
            prePre = pre;
            pre = result;
        }
        return result;
    }

都看到这了,点个赞再走呗,谢谢谢谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇总区间(Java)

大家好我是苏麟 , 这篇文章也是凑数的 ... 描述 : 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 n…

Redis(02)| 数据结构-SDS

一、键值对数据库是怎么实现的&#xff1f; 在开始讲数据结构之前&#xff0c;先给介绍下 Redis 是怎样实现键值对&#xff08;key-value&#xff09;数据库的。 Redis 的键值对中的 key 就是字符串对象&#xff0c;而 value 可以是字符串对象&#xff0c;也可以是集合数据类型…

vue3 + Element-plus + Echarts 5.2 切换不更新、导出PDF不显示 解决方案

vue3 Element-plus Echarts 5.2 切换不更新、导出PDF不显示 解决方案 1、使用 el-tabs 切换导致 Echarts 不显示问题2、折线图 Echarts 不更新问题3、异常抛出&#xff1a; Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘type‘)4、Echa…

OpenHarmony docker环境搭建所见的问题和解决

【摘要】OpenHarmony docker环境搭建需要一台安装Ubuntu的虚拟机&#xff0c;并且虚拟机中需要有VScode。 整个搭建流程请参考这篇博客&#xff1a;OpenHarmony docker环境搭建-云社区-华为云 (huaweicloud.com) 上篇博主是用Ubuntu的服务器进行环境搭建的&#xff0c;在使用VS…

基于单片机的智能清洁小车设计—控制系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的主要内容和目标二、总体方案设计2.1智能清洁小车的硬件系统组成2.2智能清洁小车的硬件结构图 三、 小车结构设计5.1基本布局和功能分析5.2小车二维及三维图小车三维图&#xff1a; 四、 原理图程序 五、…

2.OsgEarth封装

环境&#xff1a;Osg3.6.5 OsgEarth3.2 Qt5.15.2 基于qt将osgEarth封装&#xff0c;在Qt中作为GLWidget进行呈现。 1.Earth类的封装 基于地球的初始化顺序进行了封装&#xff0c;并暴露出了一些必要的属性&#xff0c;类似viwer、map、mapNode等。最为重要的是…

Fourier分析导论——第1章——Fourier分析的起源(E.M. Stein R. Shakarchi)

第 1 章 Fourier分析的起源 (The Genesis of Fourier Analysis) Regarding the researches of dAlembert and Euler could one not add that if they knew this expansion, they made but a very imperfect use of it. They were both persuaded that an arbitrary and d…

基于单片机的空气质量检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、主要内容二、系统方案设计2.1 系统方案设计2.2 主控制器模块选择 三、 系统软件设计4.1 程序结构分析4.2系统程序…

汇编学习(1)

汇编、CPU架构、指令集、硬编码之间的关系 ● 汇编语言&#xff1a;这是一种低级语言&#xff0c;用于与硬件直接交互。它是由人类可读的机器码或指令组成的&#xff0c;这些指令告诉CPU如何执行特定的任务。每条汇编指令都有一个对应的机器码指令&#xff0c;CPU可以理解和执…

25 行为型模式-备忘录模式

1 备忘录模式介绍 备忘录模式(memento pattern)定义: 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 2 备忘录模式原理 3 备忘录模式实现 /*** 发起人角色**/ public class Originator {private Strin…

城中村智能电表改造解决方案

随着我国城市化进程的加快&#xff0c;城中村作为城市发展的矛盾焦点&#xff0c;其居住环境、管理水平等问题日益凸显。城中村用电管理存在着用电安全隐患、电费核算不准确、偷电现象屡禁不止等问题。为了提高城中村用电管理水平&#xff0c;确保用电安全&#xff0c;推进智能…

通过pip,查看tensorflow和tensorflow-probaility版本

查看tensorflow和tensorflow-probability版本 如果在加载tensorflow 和 tensorflow-probablity时&#xff0c;没有成功的话&#xff0c;可以看下这两个包的版本&#xff0c;网上可以搜一下&#xff0c;这两个包版本是否搭配。 从上述信息总可以看到tensorflow包的版本是2.13.0…

DSP开发例程(4): logbuf_print_to_uart

目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…

Web服务器与Http协议

Web服务器与Http协议 一.Web服务器 1.简介 Web服务器一般指网站服务器&#xff0c;也称之为WWW(World Wide Web)服务器Web服务器是指驻留于因特网上某种类型计算机的程序Web服务器不是硬件服务器&#xff0c;而是软件服务器。Web服务器其主要功能是提供网上信息浏览服务&…

论文阅读——BERT

ArXiv&#xff1a;https://arxiv.org/abs/1810.04805 github&#xff1a;GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT 一、模型及特点&#xff1a; 1、模型&#xff1a; 深层双向transformer encoder结构 BERT-BASE&#xff1a;(L12, H…

2.19每日一题(分段函数求定积分)

注意&#xff1a;当x>1时需要分区间求定积分 用变上限积分的定理&#xff1a;如果 f(x) 连续&#xff0c;则 F(x) 的导数 f(x) 变上限积分的导数为 f(x) 1、先判断 f(x) 是否连续———>判断在分界点的值是否相等&#xff0c;相等则 f(x) 连续&#xff0c;则 F(x&#…

实体店做商城小程序如何

互联网电商深入各个行业&#xff0c;传统线下店商家无论产品销售还是服务业&#xff0c;仅靠以往的经营模式&#xff0c;很难拓展到客户&#xff0c;老客流失严重&#xff0c;同时渠道单一&#xff0c;无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…

Java练习题2020-4

小明今天收了N个鸡蛋&#xff0c;每个鸡蛋各有重量&#xff0c;现在小明想找M个重量差距最小的鸡蛋摆成一盒出售&#xff0c;输出符合条件的最重一盒鸡蛋的总重量 输入说明&#xff1a;第一行&#xff0c;鸡蛋个数N(N<1000) 每盒个数M(M<N)&#xff1b;第二行&#xff0…

如何使用PHPicker在iOS系统无授权下获取资源

本文字数&#xff1a;2766字 预计阅读时间&#xff1a;18分钟 自iOS14系统开始&#xff0c;苹果加强了用户隐私和安全功能。新增了“Limited Photo Library Access”模式&#xff0c;同时在授权弹窗中增加了“Select Photo”选项。这意味着用户可以在应用程序请求访问相册时选择…

Unity编辑器扩展之自定义Inspector面板

首先找到的是这个[CustomEditor(typeof(Class), true)]&#xff0c;这个东西能够自己绘制在Inspector视图的显示规则&#xff0c;但是&#xff01;如果这个类被另一个类持有&#xff0c;他就没作用了&#xff0c; 效果图&#xff1a; 1.对CustomClass类编辑自定义面板 2. 对M…