[动态规划] (二) LeetCode 面试题 08.01.三步问题

[动态规划] (二) LeetCode 面试题 08.01.三步问题

文章目录

      • [动态规划] (二) LeetCode 面试题 08.01.三步问题
        • 题意解析
        • 解题思路
          • 1.状态表示
          • 2.状态转移方程
          • 3.初始化和填表顺序
          • 4.返回值
        • 代码实现
        • 总结

面试题 08.01. 三步问题

image-20231028235019074

题意解析

(1) 小孩可以跳1-3阶台阶

(2) 结果很大,结果取模1000000007

解题思路
1.状态表示

dp[i]:跳到第i阶台阶有多少种方法。

2.状态转移方程

从第0阶到第1阶的方法有:1种

第0阶到第1阶(0-1)

从第0阶到第2阶的方法有:1+1 = 2种

第0阶到第一阶到第二阶(0-1-2) 和 第0阶到第2阶(0-2)

从第0阶到第3阶的方法有:1 + (1+1) + 1 = 4种

第一种分类:0-1-3

第二种分类:0-1-2-3 、 0-2-3 和 0-3

从第0阶到第4阶的方法有:1 + 2 + 4 = 7种

第一种分类:0-1-4

第二种分类: 0-1-2-4 和 0-2-4

以及第三种分类:0-1-3-4 、0-1-2-3-4、0-2-3-4 和 0-3-4

我们已经可以发现第n种就是对前3种方法的累加和。

从第0阶到第n阶的方法有:

(因为小孩仅能走1步、2步和3步,所以仅和n-1 、n-2 、n-3有关)

  • dp[n-1] -> n:dp[n-1]种
  • dp[n-2] -> n:dp[n-2]种
  • dp[n-3] -> n: dp[n-3]种

即dp[n] = dp[n-1] + dp[n-2] + dp[n-3] 种

所得状态转移方程为:

dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
3.初始化和填表顺序

初始化:

dp[1] = 1, dp[2] = 2, dp[3] = 4

填表顺序:

从左到右

4.返回值

题意:到第n位置的方法。

dp[i]:跳到第i阶台阶有多少种方法。

return dp[n];

请先尝试书写代码,再来看后面的内容。


代码实现
class Solution {
public:int waysToStep(int n) {//0 1 2 3; 1:0-1; 2:0-1-2, 0-2; 3:0-1-3 0-1-2-3 0-2-3 0-3;//处理边界情况if(n <= 2) return n;else if(n == 3) return 4;//创建dp表vector<long long> dp(n+1);//初始化dp数组dp[1] = 1, dp[2] = 2, dp[3] = 4;for(int i = 4; i <= n; i++){//填表dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % 1000000007;}return dp[n];}
};

image-20231029001120702

总结

细节1:处理边界情况。(很简单不多说)

细节2:遍历完整的n, i <= n

细节3:题目要求对结果%1000000007,我们在相加后直接取模,防止数据太大。

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

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

相关文章

shell脚本实战案例---数据库的备份

目录 1.环境准备 2.数据库的分库分表备份 2.1 分库备份 2.2 分表备份 2.3 分库分表备份 通过此次shell脚本实战案例&#xff0c;我们将学习和了解到如何利用shell脚本实现数据库的分库分表备份。 1.环境准备 要实现数据库的备份&#xff0c;首先我们应该要有数据库的环境&…

python实验2 π的计算

π的计算 1. 圆周率的介绍2. BBP公式计算圆周率3. 蒙特卡洛方法计算π 1. 圆周率的介绍 圆周率π自古就是人们计算的问题&#xff0c;π到底是什么&#xff0c;圆的周长与直径的比值或者是面积与半径的平方之比&#xff0c;或者是使sinx0的最小正数x。所以每一种定义每一种理解…

Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法

文章目录 0 代码仓库1 环境以及条件说明2 准备一&#xff1a;下载Oracle 19c驱动&#xff0c;需要下载两个包&#xff0c;注意分x86和x642.1 32位2.2 64位2.3 新建目录并解压缩2.4 记录路径2.4.1 x86需要的路径2.4.2 x64需要的路径 3 准备二&#xff1a;下载Sources源代码的两种…

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL&#xff0c;匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

用于静电除尘的高频高压供电电源的设计

摘要 节能减排已成为当今社会发展的主题&#xff0c;高压静电除尘器以其独特的优势广泛应用于业粉尘的回收与处理领域。随着工业的发展&#xff0c;环境问题日益突出&#xff0c;国家制定了一系列的法律、法规来限制工业排放烟气中的粉尘浓度&#xff0c;常见的除尘方法有水膜…

Navicat for MySQL 视图创建使用方法

创建视图步骤&#xff1a; 点击新建&#xff1b;选择视图&#xff1b;点击视图创建工具&#xff1b;可以在左侧拖拽表到工作区&#xff1b;选择表字段进行连线

使用koa搭建服务器(一)

最近有个需求需要使用到koa搭建服务器并编写接口对数据库进行增删改查&#xff0c;因此写一篇博客记录这段时间的收获。 一、新建koa项目 &#xff08;一&#xff09;安装koa及其相关依赖 npm i koa npm i koa-router// 中间件&#xff0c;用于匹配路由 npm i koa-bodyparse…

​Vue3响应式原理

目录 手动收集依赖通知更新 effect()&#xff1a;更改数据后执行&#xff0c;更新依赖该数据的数据&#xff08;依赖&#xff09; track&#xff08;&#xff09;收集依赖的effect()放进dep&#xff08;set去重&#xff09; 更新时触发trigger函数通知dep里所有effect()执行…

uniapp 中添加 vconsole

uniapp 中添加 vconsole 一、安装 vconsole npm i vconsole二、使用 vconsole 在项目的 main.js 文件中添加如下内容 // #ifdef H5 // 提交前需要注释 本地调试使用 import * as vconsole from "vconsole"; new vconsole() // 使用 vconsole // #endif三、成功

Ansible简介

环境 控制节点&#xff1a;Ubuntu 22.04Ansible 2.10.8管理节点&#xff1a;CentOS 8 组成 Ansible环境主要由三部分组成&#xff1a; 控制节点&#xff08;Control node&#xff09;&#xff1a;安装Ansible的节点&#xff0c;在此节点上运行Ansible命令管理节点&#xff…

Linux命令(107)之basename

linux命令之basename 1.basename介绍 linux命令basename是用来从文件路径中获取文件的基本名称 2.basename用法 basename [参数] NAME basename参数 参数说明-a支持多个参数&#xff0c;并将每个参数视为一个NAME-s移除后缀-z使用NUL而不是换行符分隔输出--help显示帮助信…

TypeScript - 枚举 - 常量枚举

常量枚举的定义 使用 const enum 进行常量枚举的定义&#xff0c; 格式如下 &#xff1a; const enum 枚举类型名称{ 元素1, 元素2&#xff0c; 。。。。。。 } 常量枚举的特殊的地方 常量枚举 &#xff1a; 在编译后是不存在的。 在使用常量枚举的元素的时候&#xff0c;编译之…

Android 系统架构

目录 Android 系统架构 1. Android 应用层 2. Android应用框架层 2.1 Activity Manager &#xff08;活动管理器&#xff09; 2.2 Window Manager &#xff08;窗口管理器&#xff09; 2.3 Content Provider (内容提供器) 2.4 View System&#xff08;视图系统&a…

Leetcode刷题详解——搜索插入位置

1. 题目链接&#xff1a;35. 搜索插入位置 2. 题目描述&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

JVM调优(10)JVM的运行时数据区

一、概述 对于 C C 来说&#xff0c;在内存管理领域&#xff0c;JVM既拥有最高的权利&#xff0c;但是同时他们又是从事最基础工作的劳动人员&#xff0c;因为他们担负着每一个对象从开始到结束的维护责任。而对于Java来说&#xff0c;再虚拟机自动内存管理的帮助下&#xff0…

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…

STM32 CAN使用

STM32 CAN使用 简介各种通讯接口对比报文总线上的报文信息表示为几种固定的赖类型数据帧列表模式掩码模式配置CAN配置参数位时序 简介 控制器局域网CAN&#xff08;Controller Area Network)是由德国博世公司为汽车应用而开发的多主机局部网络&#xff0c;用于汽车的监测和控制…

Openssl数据安全传输平台015:OCCI的使用方法+在项目中的设计与实现

文章目录 1 OCCI使用1.1 初始化 - Environment 类1.2 连接数据库 - Connection 类1.3 执行SQL 2 OCCI在项目中的使用2.1 OCCI单独封装为一个类文件OCCIOP2.2 在ServerOP中作为私有成员2.3 ServerOP::ServerOP(string json)中实例化进行使用2.4 秘钥协商过程中进行读写操作 1 OC…

关于错误javax.net.ssl.SSLException: Received close_notify during handshake

今天开发的小伙伴遇到一问题&#xff0c;报错内容是&#xff1a; javax.net.ssl.SSLException: Received close_notify during handshake at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.securi…

智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应

水厂在生活中的重要性不可忽视。它们提供清洁、安全的水源&#xff0c;满足人们饮用、洗浴、烹饪等基本需求&#xff0c;保障公共卫生&#xff0c;预防疾病传播;同时&#xff0c;水厂也促进经济发展&#xff0c;为工业生产和农业灌溉提供保障&#xff0c;吸引和支持企业的投资和…