当前位置: 首页 > news >正文

【动态规划】-- 三步问题(easy)

文章目录

  • 1. 题目
  • 2. 题目解析
  • 3. 代码

1. 题目

在线oj
三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。

示例 1:

 输入:n = 3 
 输出:4
 说明:有四种走法

示例 2:

 输入:n = 5
 输出:13

提示:

  1. n 范围在[1, 1000000]之间

2. 题目解析

1. 状态表示
经验 + 题目要求:以i位置为结尾,…
dp[ i ] 表示:到达 i 级台阶有dp[ i ] 种方法。
2. 状态转移方程

以 i 位置的状态,最近的一步来划分问题。

dp[ i ] :

  1. 从(i- 1)位置到 i 位置
  2. 从(i- 2)位置到 i 位置
  3. 从(i- 3)位置到 i 位置
    在这里插入图片描述

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

3. 初始化
dp[ 1 ] = 1;
dp[ 2 ] = 2;
dp[ 3 ] = 4;

4. 填表顺序
从左往右

5. 返回值
dp[n]

3. 代码

class Solution {
    public int waysToStep(int n) {
        //处理边界情况
        if (n == 1){
            return 1;
        }
        if (n == 2){
            return 2;
        }
        if (n == 3){
            return 4;
        }
        
        int MOD = (int) 1e9 + 7;
        //1. dp表
        int[] dp = new int[n + 1];
        //2. 初始化
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 4;
        //3. 填表
        for (int i = 4; i <= n  ; i++) {
            dp[i] = ((dp[i - 1] + dp[i - 2]) % MOD + dp[i - 3]) % MOD;
        }
        //4. 返回值
        return dp[n];
    }
}

相关文章:

  • python之并发编程
  • 用php实现jt808部标协议对接
  • 开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(五)
  • Day 1:Leetcode 两数相除
  • 云原生周刊:Ingress-NGINX 漏洞
  • C# 匿名方法讲解
  • Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明
  • 【常用的中间件】
  • c++ count方法
  • HTTP 核心知识点整理
  • C++进阶——哈希表的实现
  • 探秘Transformer系列之(18)--- FlashAttention
  • 如何避免测试环境不稳定导致的误报
  • 单纯形法之大M法
  • 解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“
  • 歌曲缓存相关功能
  • Qt在IMX6ULL嵌入式系统中图片加载问题排查与解决
  • 多线程—锁策略
  • 去中心化金融
  • 漏洞挖掘---锐明Crocus系统Service.do接口任意文件读取
  • 加盟型网站建设/关键词排名零芯互联关键词
  • 网站怎么做微博认证/建网站
  • 潍坊网站建设方案推广/站长工具怎么关掉
  • 网站建设需要几十万/深圳全网营销平台排名
  • 教育企业重庆网站建设/游戏优化大师下载安装
  • 怎么做hs网站/南宁网络推广外包