【动态规划】爬楼梯爬的不仅仅是楼梯

news2024/12/23 23:43:25

深度思考爬楼梯问题,抽取一般过程,目标是对其变式题也能认出并且求解

一、题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

https://leetcode.cn/problems/climbing-stairs/description/

示例:

在这里插入图片描述

二、动态规划过程详解

思考一:为什么可以动态规划?

动态规划是指大规模问题,可以由它的小规模问题通过动态规划方程解出,而对本题来说,到达第 i 阶台阶的方案数可以由到达第 i-1 和 第 i-2的方案数求出,动态规划方程为:

dp[i] = dp[i-1] + dp[i-2]

解释:

上述动态规划方程中,dp 表示到达第 i 阶台阶的方案数,可以由第 i-1 阶台阶走一步到达第 i 阶台阶,也可由第 i-2 阶台阶走两步到达第 i 阶台阶,所以可写出如上的动态规划方程。

思考二: 如何初始化

dp[1] = 1;
dp[2] = 2; 

解释:

由状态转移方程决定了初始化的值为 dp[1] 和 dp[2] (dp[i] = dp[i-1] + dp[i-2])

从第 0 台台阶迈一步到达第 1 阶台阶,因此到达第 1 阶台阶的方案有 1 个,同理,得到 dp[2] (由第 1 阶台阶迈一步 和 由第 0 阶台阶迈两步)

三、代码

class Solution {
     // 爬楼梯
    public int climbStairs(int n) {
        if(n == 1){
            return 1;
        } else if(n == 2){
            return 2;
        }
        int dp[] = new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        for(int i=3; i<n+1; i++){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
}

四、看变式 —— 统计构造好字符串的方案数

给你整数 zero ,one ,low 和 high ,我们从空字符串开始构造一个字符串,每一步执行下面操作中的一种:

  • 将 ‘0’ 在字符串末尾添加 zero 次。
  • 将 ‘1’ 在字符串末尾添加 one 次。

以上操作可以执行任意次。

如果通过以上过程得到一个 长度 在 low 和 high 之间(包含上下边界)的字符串,那么这个字符串我们称为 好 字符串。

https://leetcode.cn/problems/count-ways-to-build-good-strings/description/

在这里插入图片描述

思路:

让我们来看一下,本题和爬楼梯的区别和联系

  • 返回值上: 它们都是求方案数,爬楼梯是求到某个值的方案数,而本题是求到某个范围的方案数,那么爬楼梯只需要返回 dp[n],本题返回 dp[low] + dp[low+1] + … + dp[high] 。
  • 状态转移方程上:
dp[i] = dp[i - zero] + dp[i - one];

代码:

    // 2466. 统计构造好字符串的方案数
    public int countGoodStrings(int low, int high, int zero, int one) {
        int mod = (int)(1e9 + 7);
        int[] dp = new int[high + 1];
        // 初始化
        int step1 = Math.min(zero, one);
        int step2 = Math.max(zero, one);
        dp[step1] = 1;
        dp[step2] = step2%step1==0 ? 2 : 1; // 走到 step2 的可能方案(直接走到step2、每次蹦跶step1直到蹦跶到step2)

        // 遍历
        for(int i=step1+1; i<=high; i++){
            if(i > step2) { // 可以由 i - step1 和 i - step2 到达
                dp[i] = (dp[i - step1] + dp[i - step2]) % mod;
            } else if(i < step2){  // 只可以由 i - step1 到达
                dp[i] = dp[i - step1];
            }
        }
        int res = 0;
        for(int i=low; i<=high; i++){ // 计算结果,在 low ~ high 之间的方案数
            res = (res + dp[i]) % mod;
        }
        return res;
    }

<总结> : 对一个问题,我们的求解关键是应该是抽丝剥茧,把问题捋清楚。像本文中的第二种变式题,它题目里的什么 0 1 就是误导,和 0 和 1 没关系,不要被误导,就是两种 step,给两种走不同 step 的方式!!!翻译过来就是走楼梯问题 ~~ 大家有不明白的欢迎评论区和我交流~~

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

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

相关文章

[附源码]Python计算机毕业设计SSM建筑工程管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

.NET 分页帮助类

一直以来&#xff0c;分页是一个非常常见的需求&#xff0c;以前也用过很多的分页控件&#xff0c;比如AspNetPager&#xff0c;现在自己参照之前用过的&#xff0c;自己写了一个非常简单实用的分页实现方法。 先来看看应用效果&#xff1a; 如图&#xff0c;定义了是前10页&…

论文投稿指南——中文核心期刊推荐(电子、通信技术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384;&#x1f388; 核心期刊在国内的应用范围非常广&#xff0c;核心期刊发表很多是国内作者晋升中的硬性要求&#xff0c;在…

springboot基础

目录 一、springboot介绍 1、什么是SpringBoot 二、springboot入门案列 2.1、使用idea自动生成springboot工程 2.1.1、用idea自动生成springboot 2.1.2、spring程序与springboot程序对比 三、springboot启动原理 3.1、parent 3.2、starter 3.3、引导类 3.4、内嵌tomc…

3dmax 单位匹配和基本单位设置

使用3dmax打开模型&#xff0c;出现下图对话框&#xff1b; 打开文件的单位和系统的单位不匹配&#xff0c;文件的单位是米&#xff0c;系统的单位是英寸&#xff1b;有2个选择&#xff0c;重置文件的单位为系统的单位&#xff0c;采用文件自己的单位&#xff1b; 用后一个打开…

C语言第十六课:操作符详解(下)——逗号表达式、下标引用、函数调用、结构成员操作符与操作符属性

目录 前言&#xff1a; 一、逗号表达式&#xff08;exp1&#xff0c;exp2&#xff0c;exp3&#xff0c;...&#xff0c;expN&#xff09;&#xff1a; 二、下标引用、函数调用和结构成员[ ]、( )、. 、->&#xff1a; 1.下标引用操作符[ ]&#xff1a; 2.函数调用操作符( …

NoSQL之Redis配置与优化

目录 一、redis简介 1、redis的优点 2、redis的缺点 3、redis应用场景 4、redis为什么这么快 5、redis与memcached比较 二、关系数据库与非关系型数据 1、关系型数据库 2、非关系型数据库 3、关系型数据库和非关系型数据库区别 三、redis安装部署 四、redis命令工具…

一套完整的养老院人员定位解决方案包含哪些内容?

养老院人员定位解决方案是建立面向社区及养老组织的传感网系统与信息渠道&#xff0c;并在此基础上提供实时、方便、高效、低成本的、物联化、互联化、智能化的养老服务。 人口老龄化问题早已成为当今社会关注的重要问题之一。在养老院封闭的环境&#xff0c;养老院希望利用智能…

解放程序员双手——ChatGPT安装踩雷之路+使用体验

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

数据之道读书笔记-10未来已来:数据成为企业核心竞争力

数据之道读书笔记-10未来已来&#xff1a;数据成为企业核心竞争力 数字化转型不能一蹴而就&#xff0c;数据治理也不是一朝一夕之功。数字化转型带来机遇的同时&#xff0c;也给整个企业的数据治理带来了新的挑战。 基于对华为公司数字化转型的解读&#xff0c;我们建立了数据…

Win11的两个实用技巧系列之查看所有用户帐户、应用冻结

目录 如何在Win11上查看所有用户帐户?Win11上查看所有用户帐户四种方法 方法一&#xff1a;在 Windows 11 的“设置”中检查所有帐户 方法二&#xff1a;在 Windows 11 的计算机管理中检查所有帐户 方法三&#xff1a;在 Windows 11 上通过命令提示符检查所有帐户 方法四&am…

【微信小程序】商品管理-微信小程序项目开发入门

有个人家开店&#xff0c;店里商品堆积越来越多&#xff0c;多了就不好管理了&#xff0c;那有没有想过需要类似于商品管理的一套小程序呢&#xff0c;这里给大家提供一个容易上手的商品管理微信小程序解决方案&#xff0c;非常适合新手学习入门。 先说明一下这里讲得是一个微信…

《python 数据可视化基础》第三章 散点图 scatter

第三章 散点图 scatter 参考自官方文档&#xff1a;https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.scatter.html#matplotlib.axes.Axes.scatter matplotblib 绘制散点图常用参数&#xff1a; x, y&#xff1a;一个或者多个点的位置&#xff1b;s&#xff1…

Halcon快速入门

前言一&#xff0c;HALCON 概述1.1&#xff0c;HALCON 安装二&#xff0c;HALCON 架构 2.1&#xff0c;算子 2.1.1&#xff0c;参数和数据结构 2.2&#xff0c;拓展包2.3&#xff0c;接口 2.3.1&#xff0c;HALCON-Python 接口2.3.2&#xff0c;HALCON-C 接口2.3.3&#xff0c;…

[附源码]Python计算机毕业设计SSM家政服务预约小程序(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

开源版商城源码V2.0【小程序 + H5+ 公众号 + APP】

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款轻量级、高性能、前后端分离的电商系统&#xff0c;&#xff0c;支持微信小程序 H5 公众号 APP&#xff0c;前后端源码完全开源&#xff0c;看见及所得&#xff0c;完美支持二…

[附源码]Python计算机毕业设计SSM家政服务管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue中的h函数与JSX语法

vue不仅像react一样实现了jsx&#xff0c;而且还借助jsx发挥了javascript动态画的优势&#xff0c;了解学习jsx可以让你更灵活的开发需求。 一、 h函数 在聊vue中的JSX之前&#xff0c;需要简单介绍一下 h 函数&#xff0c;理解了 h 函数&#xff0c;会更好的理解JSX。 1.h函…

[附源码]计算机毕业设计基于Springboot作业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

WebLogic JVM Core dumps文件的生成控制

一&#xff0c;背景 当我们运行的WebLogic JVM发生Fatal Error时&#xff0c;会造成JVM crash掉&#xff0c;进而造成进程终止。一般来说crash的时间我们是无法估计在什么时候的&#xff0c;它具有很大的偶然性&#xff0c;因此理论上有时我们希望自动产生Core dump文件来提供…