【动态规划】| 路径问题之不同路径 力扣62

news2024/11/15 3:59:56

🎗️ 主页:小夜时雨
🎗️ 专栏:动态规划
🎗️ 如何活着,是我找寻的方向
优雅

目录

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

1. 题目解析

题目链接: https://leetcode.cn/problems/unique-paths/description/
题目解析
通常动态规划的题目有五个大步骤进行解析, 接下来一一来进行分析.

1. 状态表示
动态规划的重点是在状态表示这里的, 我们通过状态表示才可以写出正确的状态转移方程, 状态表示我们通话吃那个都是根据 经验+题目 要求来进行定义的.
比如本道题是一个二维的矩阵, 那么我们可以定义我们的状态表示为

dp[i][j]: 表示走到 (i, j) 这个位置时, 一共有多少条不同的路径

合适的状态表示才能很顺利正确的推导出状态转移方程, 所以要积累经验定义出合适的状态表示.

2. 状态转移方程
根据题目要求, 假如我们走到了 (i,j) 位置时, 我们可以从上面往下走或者是从左面往右走, 即是从 (i-1, j) 或者 (i, j-1) 往 (i, j) 的位置走.
根据状态表示, dp[i][j] 的大小可以由两部分组成, 既然问的是不同路径, 那么共有两条不同的路径: 从左往右走或者从上往下走, 二者之间应该是和的关系. 从 (0, 0) 走到 (i-1, j) 共有多少种方式, 那么从 (0, 0) 走到 (i, j) 也有多少种方式, 正好所对应的就是 dp[i - 1][j] 所表示的含义. 同理 dp[i][j - 1] 也是. 那么状态转移方程应如下表示:

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

在这里插入图片描述

3. 初始化
细节问题: 观察状态转移方程可知, 有可能会有越界的风险, 此处我们采取一种多加一行一列的方式来进行初始化.
多加一行一列要保证两点

  1. 虚拟节点的值要保证后面的dp 表里的值是正确的
  2. 要注意下标的映射关系. 因为我们是多加了一行一列, 所以对应到原始数组就应该行列要减一

原本的dp[0][0] 只有一种路径方式, 也就是 dp[0][0] = 1. 因为我们多加了一行一列, 所以变成了 dp[1][1] = 1. 那么我们只需保证 现在的dp[0][1] = 1 或者 dp[1][0] = 1即可保证后续dp 表中的值都是正确的.
在这里插入图片描述

  1. List item

4. 填表顺序
观察可知, 填 (i, j) 的值的时候需要用到上一行和左边的值. 所以填表顺序是 从上往下, 从左往右.

5. 返回值
根据题目的要求, 要到达(m, n) 共有多少不同的路径, 正好对应 dp[m][n] 的表示. 所以返回 dp[m][n] 即可.

2. 代码

动态规划的代码编写一般都是分为 4 个步骤进行:

  1. 创建 dp 表
  2. 初始化
  3. 填表
  4. 返回值
// 这道题即可以使用记忆化搜索, 也可以使用动态规划
    // 时间复杂度都是 O(M*N)
    public int uniquePaths(int m, int n) {
        // 1.创建 dp表
        // 2.初始化
        // 3.填表
        // 4.返回值
        // 动态规划 这里的是二维, 所以时空都是O(M*N)

        int[][] dp = new int[m + 1][n + 1];
        dp[0][1] = 1; // 初始化
        // 填表, 从上往下, 从左往右
        // 注意多加了一行一列, 所以都是从 (1, 1) 开始遍历填写
        // 注意下标的映射关系, 此题不涉及到原数组, 所以没有影响
        for(int i = 1; i <= m; i++) { // 从上往下每一行
            for(int j = 1; j <= n; j++) { // 从左往右每一列
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m][n];
    }

🎗️🎗️🎗️ 好啦,到这里有关本题的分享就没了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,我们下期再见,拜了个拜~ ☆*: .。. o(≧▽≦)o .。.:*☆

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

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

相关文章

【Linux】解决由于 network和 NetworkManager不兼容,导致的网络服务错误

今天尝试启动在虚拟机中启动一些中间件环境&#xff08;用docker管理&#xff09;&#xff0c;使用ssh连接虚拟机&#xff0c;却始终无法连接 我怀疑是不是虚拟机的ip地址改变了&#xff0c;但是之前我的虚拟机ip已经在 /etc/sysconfig/network-scripts 目录下&#xff0c;创…

PCA与LDA

共同点 降维方法&#xff1a; PCA和LDA都是数据降维的方式&#xff0c;它们都能通过某种变换将原始高维数据投影到低维空间。 数学原理&#xff1a; 两者在降维过程中都使用了矩阵特征分解的思想&#xff0c;通过对数据的协方差矩阵或类间、类内散度矩阵进行特征分解&#xff…

Vue项目实践:使用滚动下拉分页优化大数据展示页面【通过防抖加标志位进行方案优化】

Vue项目实践&#xff1a;使用滚动下拉分页优化大数据展示页面 前言 传统的分页机制通过点击页码来加载更多内容&#xff0c;虽然直观&#xff0c;但在处理大量数据时可能会导致用户体验不佳。相比之下&#xff0c;滚动下拉分页能够在用户滚动到页面底部时自动加载更多内容&…

实现JWT认证与授权的Spring Boot项目详解

我们将详细介绍如何使用JWT&#xff08;JSON Web Tokens&#xff09;结合Spring Boot框架实现用户认证和授权系统。此方案将包括用户注册、登录以及通过JWT令牌进行后续请求的身份验证过程。我们将从引入必要的依赖开始&#xff0c;然后逐步构建项目的各个部分&#xff0c;包括…

如何查看当前的gruop_id 的kafka 消费情况 这个可以查看到是否存在消费阻塞问题

如何查看当前的gruop_id 的kafka 消费情况 这个可以查看到是否存在消费阻塞问题 命令如下: /kafka/bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group GWW --describe 其中 127.0.0.1 为zookeeper 服务器ip GWW 为对应要查看的group_id 如下…

从零到一建设数据中台(番外篇)- 数据中台UI欣赏

番外篇 - 数据中台 UI 欣赏 话不多说&#xff0c;直接上图。 数据目录的重要性&#xff1a; 数据目录是一种关键的信息管理工具&#xff0c;它为组织提供了一个全面的、集中化的数据资产视图。 它不仅记录了数据的存储位置&#xff0c;还详细描述了数据的结构、内容、来源、使…

800W-2300W-4500W-7000W线绕电阻器的选型参考

EAK线绕电阻器将普通电阻器材料的高脉冲稳定性与优化的导热和高度保护相结合。安装在导热表面上可进一步改善散热并提高稳定性。 EAK提供各种外壳设计和材料&#xff08;如铝和钢&#xff09;的导线电阻器。它们符合 UL508 的要求&#xff0c;在用作制动、充电、放电或加热电阻…

Java面试八股之静态变量和实例变量的区别有哪些

Java静态变量和实例变量的区别有哪些 存储位置和生命周期&#xff1a; 静态变量&#xff1a;静态变量属于类级别&#xff0c;存储在Java的方法区&#xff08;或称为类区&#xff0c;随JVM实现而异&#xff0c;现代JVM中通常在元数据区内&#xff09;&#xff0c;并且在类首次…

Rocky Linux 9.4 部署Zabbix 7.0

文章目录 Zabbix基本概念zabbix介绍zabbix特性zabbix结构 安装Zabbix主机名配置配置Zabbix-Server(1)禁用EPEL提供的Zabbix软件包(2)安装Zabbix Server、Web前端、Agent(3)创建初始数据库(4)Zabbix server配置数据库(5)为Zabbix前端配置PHP(6)启动Zabbix server和agent进程(7)放…

Windows电脑清理C盘内存空间

ps&#xff1a;过程截图放在篇末 一、%tmp%文件 win R键呼出运行窗口&#xff0c;输入 %tmp% 自动进入tmp文件夹&#xff0c;ctrl A全选删除 遇到权限不足&#xff0c;正在运行&#xff0c;丢失的文件直接跳过即可 二、AppData文件夹 1、pipcache 在下列路径下面&…

Amortized bootstrapping via Automorphisms

参考文献&#xff1a; [MS18] Micciancio D, Sorrell J. Ring packing and amortized FHEW bootstrapping. ICALP 2018: 100:1-100:14.[GPV23] Guimares A, Pereira H V L, Van Leeuwen B. Amortized bootstrapping revisited: Simpler, asymptotically-faster, implemented. …

代理设计模式之JDK动态代理CGLIB动态代理原理与源码剖析

代理设计模式 代理模式(Proxy),为其它对象提供一种代理以控制对这个对象的访问。如下图 从上面的类图可以看出,通过代理模式,客户端访问接口时的实例实际上是Proxy对象,Proxy对象持有RealSubject的引用,这样一来Proxy在可以在实际执行RealSubject前后做一些操作,相当于…

MTK烧录USB驱动下载

下载链接 https://www.catalog.update.microsoft.com/Search.aspx?qMediaTek%20USB%20Port 驱动安装教程 https://miuiver.com/install-official-mediatek-driver/

中科数安 |-公司办公透明加密系统,数据防泄漏软件

#数据防泄漏软件# 中科数安是一家专注于提供企业级数据防泄漏解决方案的公司&#xff0c;其办公透明加密系统是专为保护企业内部核心数据资料设计的。 PC地址&#xff1a;——www.weaem.com 该系统通过以下主要功能模块实现高效的安全防护&#xff1a; 文档透明加密&#xff1…

惠州惠城:可燃气体报警器定期校准检测,安全更放心

在惠州惠城这片繁华的土地上&#xff0c;工业发展日新月异&#xff0c;安全问题愈发受到重视。其中&#xff0c;可燃气体报警器作为预防火灾和爆炸事故的重要设备&#xff0c;正在越来越多的场所得到应用。 今天&#xff0c;佰德就来探讨一下可燃气体报警器在惠州惠城的重要性…

PV 操作

PV 操作是一种实现进程 互斥 与 同步 的有效方法。PV 操作与信号量的处理相关&#xff0c;P 表示 passeren 通过的意思&#xff0c;V 表示 vrijgeven 释放的意思. 包含在 1965 年, 由荷兰人 Dijkstra 提出的信号量机制; (同是 银行家算法 和 最短路径算法 的提出者) 术语: sema…

Pytorch 实现简单的 线性回归 算法

Pytorch实现简单的线性回归算法 简单 tensor的运算 Pytorch涉及的基本数据类型是tensor&#xff08;张量&#xff09;和Autograd&#xff08;自动微分变量&#xff09; import torch x torch.rand(5, 3) #产生一个5*3的tensor&#xff0c;在 [0,1) 之间随机取值 y torch.o…

ATFX汇市:非农数据超预期靓丽,美指重新站上105关口

ATFX汇市&#xff1a;6月7日&#xff0c;美国劳工统计局公布5月份非农就业报告&#xff0c;其中提到&#xff1a;5月份增加了27.2万个岗位&#xff0c;大幅高于前值16.5万人&#xff0c;数据超预期靓丽&#xff1b;几个行业的就业人数继续呈上升趋势&#xff0c;其中医疗领域增…

操作系统 c语言模仿 磁盘文件操作

1&#xff0e;实验目的 深入了解磁盘文件系统的实现。 2&#xff0e;实验预备知识 文件的操作&#xff1b; 文件的逻辑结构和物理结构&#xff1b; 磁盘空间的管理&#xff1b; 磁盘目录结构。 3&#xff0e;实验内容 设计一个简单的文件系统&#xff0c;用文件模拟磁盘&…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…