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

news2024/11/29 12:41:13

[动态规划] (二) 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.coloradmin.cn/o/1145640.html

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

相关文章

革新技术,释放创意 :Luminar NeoforMac/win超强AI图像编辑器

Luminar Neo&#xff0c;一个全新的AI图像编辑器&#xff0c;正以其强大的功能和独特的创意引领着图像编辑的潮流。借助于最新的AI技术&#xff0c;Luminar Neo为用户提供了无限可能的图像编辑体验&#xff0c;让每一个想法都能被精彩地实现。 Luminar Neo的AI引擎强大而高效&…

035-第三代软件开发-Qt属性系统

第三代软件开发-Qt属性系统 文章目录 第三代软件开发-Qt属性系统项目介绍Qt属性系统目的属性与类成员使用声明属性的要求 动态属性属性和自定义类型总结一下 关键字&#xff1a; Qt、 Qml、 Q_PROPERTY 、 setProperty、 属性 项目介绍 欢迎来到我们的 QML & C 项目&a…

Winsows QT5.15安装教程——组件务必要选上Sources

文章目录 1 下载地址2 开始安装2.1 选择一个磁盘空间大的位置安装QT&#xff0c;安装完可能会占用30G以上的空间2.2 选择组件2.3 接下来进入傻瓜式安装 3 QT 组件一览3.1 “Preview”分类下的开发组件3.1.1 编译器模块。3.1.2 “Qt ”分类下的开发组件 1 下载地址 https://www…

双向链表的初步练习

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”…

python项目之数学函数绘图软件(django)

项目简介 管理员用户&#xff1a; &#xff08;1&#xff09;个人信息管理&#xff1a;管理员用户可以通过此功能对自己的密码进行维护。 &#xff08;2&#xff09;用户信息管理&#xff1a;管理员用户通过此功能可以维护系统内注册用户的信息&#xff0c;比如可以对用户的姓…

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…

CrossOver 23.6.0 虚拟机新功能介绍

CrossOver 23.6.0 Mac 此应用程序允许您运行为 Microsoft Windows 编写的程序&#xff0c;而无需实际安装操作系统。 CrossOver 23.6.0 Mac 包括一个 Windows 程序库&#xff0c;用于它可以运行的 Windows 程序。 您会发现非常流行的应用程序&#xff0c;例如 Microsoft Word…

【JavaEE】HTTP协议

HTTP协议 HTTP是什么?HTTP 协议格式HTTP 请求格式HTTP响应格式协议格式总结 HTTP 请求 (Request)认识 URLURL 基本格式 关于 URL encode认识 "方法" (method)1. GET 方法2. POST 方法 认识请求 "报头" (header) HTTP 响应详解认识 "状态码" (st…

JDK项目分析的经验分享

基本类型的包装类(Character放在最后) String、StringBuffer、StringBuilder、StringJoiner、StringTokenizer(补充正则表达式的知识) CharacterIterator、StringCharacterIterator、CharsetProvider、CharsetEncoder、CharsetDecoder(较难) java.util.function下的函数表…

word公式编辑器能计算吗 word怎么添加公式编辑器

word作为常用的办公软件&#xff0c;常与公式编辑器配合使用来写论文。但该如何在word中使用公式编辑器呢&#xff1f;本文将介绍word公式编辑器能计算吗&#xff0c;word怎么添加公式编辑器的相关内容。 一、word公式编辑器能计算吗 对于word公式编辑器能计算吗这个问题&am…

遇到的题目

第一个线程打印10次a ,第二个线程打印10次吧&#xff0c;第三个线程打印10次c&#xff0c;三个线程交替打印abc public class PrintABC {private static final Object lock new Object();private static int count 0;public static void main(String[] args) {Thread threadA…

nodejs+vue+elementui+express酒店管理系统

登录&#xff1a;运行系统后&#xff0c;进行登录&#xff0c;可使用本系统。 客房预定&#xff1a;此界面先通过条件查询客房信息&#xff0c;然后进行客房预定。对预定的客房还可以取消和支付操作。 信息查询&#xff1a;可查询所有的公告信息&#xff0c;点击公告名称&#…

【黑马程序员】mysql进阶再进阶篇笔记

64. 进阶-锁-介绍(Av765670802,P121) 为了应对不同场景 全局锁-所有表 表计锁 一张表 行级锁 一行数据 65. 进阶-锁-全局锁-介绍(Av765670802,P122) 66. 进阶-锁-全局锁-一致性数据备份(Av765670802,P123) 67. 进阶-锁-表级锁-表锁(Av765670802,P124) 读锁、写锁 68. 进阶…

List 3.5 详解原码、反码、补码

前言 欢迎来到我的博客&#xff0c;我是雨空集&#xff08;全网同名&#xff09;&#xff0c;无论你是无意中发现我&#xff0c;还是有意搜索而来&#xff0c;我都感到荣幸。这里是一个分享知识、交流想法的平台&#xff0c;我希望我的博客能给你带来帮助和启发。如果你喜欢我…

redis 常用方法

、进入redis redis-cli -p 6409 -h 192.168.0.100 -a q9pCeAEMAWEL 2、查询keys keys activity_mobile_* 3、赋值、查值、删除 set mykey 1 get mykey del mykey 4、批量删除 [milanredis-50-240 ~]$ redis-cli -p 6409 -h 192.168.0.100 -a q9pCeAEMAWEL keys abc* | xa…

小米机械键盘 TKL 开启预售:紧凑 87 键布局,到手 229 元

10 月 25 日消息&#xff0c;小米目前在电商平台上架了“小米机械键盘 TKL”&#xff0c;采用 87 键设计&#xff0c;支持蓝牙、有线、2.4G 连接&#xff0c;到手价为 229 元&#xff0c;最晚 11 月 3 日发货。 ▲ 图源 小米 该键盘采用简洁的黑色设计&#xff0c;紧凑 87 键布…

密码学与网络安全:量子计算的威胁与解决方案

第一章&#xff1a;引言 在当今数字化世界中&#xff0c;网络安全一直是一个备受关注的话题。密码学作为网络安全的基石&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着科学技术的不断进步&#xff0c;特别是量子计算的崛起&#xff0c;传统密码学的基础受到了严重威…

IT行业变成了夕阳行业

IT技术发展背景及历程 从2010年左右开始&#xff0c;大众创新&#xff0c;万众创业变成了一个经常看到的词语&#xff0c;在创业潮的带动下&#xff0c;同时刚好赶上了互联网的高速发展&#xff0c;一大批互联网创业公司应运而生&#xff0c;在这样的背景下&#xff0c;IT行业…

JAVASE--继承

在面向对象编程中&#xff0c;继承是一种重要的概念&#xff0c;它允许一个类继承另一个类的特征和行为。在实现继承时&#xff0c;可以使用以下步骤&#xff1a; 1. 创建一个新的子类&#xff0c;它将继承父类的特征和行为。2. 在子类的定义中使用关键字“extends”来指定它的…

c# .net6 在线条码打印基于

条码打印基于:BarTender、ORM EF架构 UI展示&#xff1a; 主页代码&#xff1a; using NPOI.OpenXmlFormats.Spreadsheet; using ServerSide.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawi…