LeetCode算法心得——爬楼梯(记忆化搜索+dp)

大家好,我是晴天学长,第二个记忆化搜索练习,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1)爬楼梯

在这里插入图片描述

假设你正在爬楼梯。需要 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


2) .算法思路

  • 爬楼梯(记忆化搜索) 。
  • 从楼顶开始下(和打家劫舍一样),但是没有限制信息,都要搜。
  • 爬法用一个数组记录起来,有几种爬法。

3) .算法步骤

1.定义一个整型数组 memo,用于存储记忆化搜索的结果。
2.创建 climbStairs 方法来启动算法。在该方法中,初始化 memo 数组,并将其所有元素初始化为 -1。
3.调用 dfs 方法,将目标阶数 n 作为参数,并返回结果。
4.在 dfs 方法中,首先检查是否已经搜索过当前阶数 n 的结果。如果在 memo 数组中存在已计算的值,则直接返回该值作为结果,避免重复计算。
1)如果当前阶数 n 小于 0,表示没有可行的爬楼梯方式,返回 0。
2)如果当前阶数 n 等于 1,表示只有一种方式到达,返回 1。
3)如果当前阶数 n 等于 2,表示有两种方式到达,返回 2。
4)否则,根据动态规划的思想,当前阶数 n 的结果等于爬到 n-1 阶和 n-2 阶的方法数之和。使用递归调用 dfs 方法,分别计算到达 n-1 阶和 n-2 阶的方法数,并将它们相加。
5)将计算得到的结果存储在 memo 数组中,以备后续使用。
6)返回当前阶数 n 的结果作为最终答案。


4).代码示例

//方法1
 class Solution {
        int[] memo;

        public int climbStairs(int n) {
            memo = new int[n+1];
            Arrays.fill(memo, -1);
            return dfs(n);
        }

        private int dfs(int n) {
            if (n < 0) {
                return 0;
            }
            if (n == 2) {
                return 2;
            } else if (n == 1) {
                return 1;
            }
            if (memo[n] != -1) {
                return memo[n];
            }
            int result = dfs(n - 1) + dfs(n - 2);
            memo[n] = result;
            return result;
        }
    }
//放法2 dp动态规划
  class Solution {
        int[] dp;

        public int climbStairs(int n) {
            dp = new int[46];
            dp[1] = 1;
            dp[2] = 2;
            if (n<=2){
                return dp[n];
            }
            for (int i = 3; i <= n; i++) {
                dp[i] = dp[i - 1] + dp[i - 2];
            }
            return dp[n];
        }

    }

5).总结

  • 动规中要给定一个增量,要不是在dfs中,要不是在数据的前面。

试题链接:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9.2 Windows驱动开发:内核解析PE结构导出表

在笔者的上一篇文章《内核特征码扫描PE代码段》中LyShark带大家通过封装好的LySharkToolsUtilKernelBase函数实现了动态获取内核模块基址&#xff0c;并通过ntimage.h头文件中提供的系列函数解析了指定内核模块的PE节表参数&#xff0c;本章将继续延申这个话题&#xff0c;实现…

Springboot集成swagger之knife4j

knife4j的最终效果&#xff1a; 支持直观的入参介绍、在线调试及离线各种API文档下载。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…

创建maven的web项目

&#xff08;一&#xff09;创建maven的web项目 Step1、创建一个普通的maven项目 &#xff08;1&#xff09;新建一个empty project&#xff0c;命名为SSM2。 点击项目名&#xff0c;右键new&#xff0c;选择Module&#xff0c;左侧选择“Maven archetype”&#xff0c;可以给…

Py之PyMuPDF:PyMuPDF的简介、安装、使用方法之详细攻略

Py之PyMuPDF&#xff1a;PyMuPDF的简介、安装、使用方法之详细攻略 目录 PyMuPDF的简介 PyMuPDF的安装 PyMuPDF的使用方法 1、基础用法 PyMuPDF的简介 PyMuPDF是一个高性能的Python库&#xff0c;用于PDF(和其他)文档的数据提取&#xff0c;分析&#xff0c;转换和操作。 …

Matrix

Matrix 如下是四种变换对应的控制参数&#xff1a; Rect 常用的一个“绘画相关的工具类”&#xff0c;常用来描述长方形/正方形&#xff0c;他只有4个属性&#xff1a; public int left; public int top; public int right; public int bottom; 这4个属性描述着这一个“方块…

如何在AD的PCB板做矩形槽孔以及如何倒圆弧角

Altium Designer 22下载安装教程-CSDN博客 如何在AD上创建完整的项目-CSDN博客 开始前&#xff0c;请先安装后AD&#xff0c;并创建好项目。 目录 1. 如何在AD的PCB板做矩形槽孔 2. 如何在AD的PCB板倒圆弧角 1. 如何在AD的PCB板做矩形槽孔 首先&#xff0c;我们进入上面创…

【Axure教程】用中继器制作卡片多条件搜索效果

卡片设计通过提供清晰的信息结构、可视化吸引力、易扩展性和强大的交互性&#xff0c;为用户界面设计带来了许多优势&#xff0c;使得用户能够更轻松地浏览、理解和互动。 那今天就教大家如何用中继器制作卡片的模板&#xff0c;以及完成多条件搜索的效果&#xff0c;我们会以…

思维模型 等待效应

本系列文章 主要是 分享 思维模型 &#xff0c;涉及各个领域&#xff0c;重在提升认知。越是等待&#xff0c;越是焦虑。 1 等待效应的应用 1.1 等待效应在管理中的应用 西南航空公司是一家美国的航空公司&#xff0c;它在管理中运用了等待效应。西南航空公司鼓励员工在工作中…

函数与数组

一.函数 1、函数的作用 定义较为复杂的但是需要重复使用的内容&#xff0c;以便再次使用&#xff0c;可以直接调用&#xff0c;节约时间&#xff0c;提高效率。 语句块定义成函数约等于别名&#xff0c;定义函数&#xff0c;再引用函数。 封装的可重复利用的具有特定功能的…

获取地区天气

上网找了半天js获取天气的方法&#xff0c;试了好几个都不行&#xff0c;还是得用api才行 1.用的心知天气的api 很简单,注册就能用,调用api需要key,官方网站&#xff1a;https://gaofen.mlogcn.com/documentation/0/00 2.areacode 这个网页里面找 精确到县&#xff1a;https:/…

Hibernate批量处理数据

概念&#xff1a; 批量处理数据是指在一个事务场景中处理大量数据。 在应用程序中难以避免进行批量操作&#xff0c;Hibernate提供了以下方式进行批量处理数据&#xff1a; (1)使用HQL进行批量操作 数据库层面 executeUpdate() (2)使用JDBC API进行批量操作 数据库层面 …

王道p149 9.设树B是一棵采用链式结构存储的二叉树,编写一个把树 B中所有结点的左、右子树进行交换的函数。(c语言代码实现)

本题代码如下 void swap(tree* t) {if (*t){treenode* temp (*t)->lchild;(*t)->lchild (*t)->rchild;(*t)->rchild temp;swap(&(*t)->lchild);swap(&(*t)->rchild);} } 完整测试代码 #include<stdio.h> #include<stdlib.h> typed…

python+requests+unittest执行自动化接口测试!

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest <2> pycharm里安装 2、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施…

基于SSM的校园奶茶点单管理系统

基于SSM的校园奶茶点单管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 奶茶列表 登录界面 管理员界面 用户界面 摘要 随着社会的发展和科技的进…

Python---把函数的返回值作为另外一个函数的参数

def test1():return 50def test2(num):print(num)# 1. 保存函数test1的返回值 result test1()# 2.将函数返回值所在变量作为参数传递到test2函数 test2(result) # 50

JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

在 Web 开发领域&#xff0c;JavaScript 提供大量技术栈可供选择。其中最典型的三套组合&#xff0c;分别是 MERN、MEAN 和 MEVN。前端框架&#xff08;React、Angular 和 Vue&#xff09;进行简化比较。 MERN 技术栈详解 MERN 技术栈包含四大具体组件&#xff1a; MongoDB&am…

读书笔记——《黑猩猩的政治》

前言 弗朗斯德瓦尔&#xff08;Frans de Waal)的代表作《黑猩猩政治》成书于1982年&#xff0c;是它的首部书籍作品&#xff0c;也是美国国会新任议员的被推荐读物。之前看的他另一部作品的《万智有灵》是2016年的作品&#xff0c;时间跨度居然这么大。《万智有灵》介绍了许多…

2023亚太杯数学建模竞赛C题详细代码解析建模

C题&#xff1a;The Development Trend of New Energy Electric Vehicles in China中国谈新能源电动汽车的发展趋势 第一问部分&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.prep…

UML建模图文详解教程06——顺序图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 顺序图概述 顺序图(sequence diagram&#xff0c;也…
最新文章