代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II

代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II


文章目录

  • 代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II
  • 62.不同路径
    • 一、动态规划
    • 二、递归
  • 63. 不同路径 II
    • 一、动态规划


62.不同路径

题目链接

  1. 确定dp数组以及下标的含义
    dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
  2. 确定递推公式
    想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]
    状态转移方程 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
  3. dp数组如何初始化
    dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理;
    for (int i = 0; i < m; i++) dp[i][0] = 1;
    for (int j = 0; j < n; j++) dp[0][j] = 1;
  4. 确定遍历顺序
    看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
  5. 打印dp数组

一、动态规划

class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""# 创建dp数组:用于存储唯一路径数dp=[[0]*n for _ in range(m)]#初始化:设置第一行和第一列的基本情况for i in range(m):dp[i][0]=1for j in range(n):dp[0][j]=1# 递推:计算每个单元格的唯一路径数for i in range(1,m):for j in range(1,n):dp[i][j]=dp[i-1][j]+dp[i][j-1]return dp[m-1][n-1]

二、递归

class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""if m ==1 or n ==1:return 1return self.uniquePaths(m-1, n)+self.uniquePaths(m,n-1)

63. 不同路径 II

题目链接

只要考虑到,遇到障碍dp[i][j]保持0就可以了。

也有一些小细节,例如:初始化的部分,很容易忽略了障碍之后应该都是0的情况。

一、动态规划

class Solution(object):def uniquePathsWithObstacles(self, obstacleGrid):""":type obstacleGrid: List[List[int]]:rtype: int"""m = len(obstacleGrid)n = len(obstacleGrid[0])dp = [[0]*n for _ in range(m)]for i in range(m):if obstacleGrid[i][0]==0:dp[i][0]=1else:breakfor j in range(n):if obstacleGrid[0][j]==0:dp[0][j]=1else:breakfor i in range(1,m):for j in range(1,n):if obstacleGrid[i][j] ==0:dp[i][j] = dp[i-1][j]+dp[i][j-1]else:continuereturn dp[m-1][n-1]

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

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

相关文章

【C++】 static成员/友元/内部类

一.static成员 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b;用static修饰的成员函数&#xff0c;称之为静态成员函数。静态成员变量一定要在类外进行初始化&#xff08;不能缺省值&#xff09;因为缺省…

树洞,找自己

找自己 ​ 我怀念的时光&#xff0c;一觉睡到大中午。外面下着阴棉的小雨&#xff0c;经历过几个燥热的大晴天&#xff0c;一场雨将近期无尽的聒噪变得静谧了起来。打开电脑玩一把红警&#xff0c;现在&#xff0c;我最不缺的就是时间。 成年之后的一切都变得急躁起来&#xf…

java使用正则表达式

这段Java代码首先定义了一个正则表达式&#xff0c;用于检查输入字符串formName是否符合特定格式。接下来&#xff0c;代码执行以下操作&#xff1a; Pattern pattern Pattern.compile("^1111(12|21)22[TF][0-9]{4}$");: 创建一个Pattern对象&#xff0c;该对象根据…

反转链表(C语言)———链表经典算法题

题目描述​​​​​​206. 反转链表 - 力扣&#xff08;LeetCode&#xff09;&#xff1a; 答案展示: 迭代&#xff1a; 递归&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* rev…

如何设计测试用例

一、介绍 测试用例就是一个文档&#xff0c;描述输入、动作、或者时间和一个期望的结果&#xff0c;其目的是确定应用程序的某个特性是否正常的工作。 二、基本格式 用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果等。 用例编号&#…

C程序内存分布及static变量

C程序内存分布及static变量 C语言中程序的内存分布 [&#x1f517;1](https://www.cnblogs.com/miaoxiong/p/11021827.html)[&#x1f517;2](https://blog.csdn.net/chen1083376511/article/details/54930191)c/c编译连接后二进制文件的存储动静态存储方式和存储区动态存储方式…

一文读懂ipv4和ipv6的区别

IPv4和IPv6是互联网协议的两个主要版本&#xff0c;它们在多个方面存在显著的差异。以下是关于IPv4和IPv6之间区别的详细探讨&#xff1a; 一、地址空间 IPv4使用32位地址&#xff0c;理论上可以表示约42.9亿个不同的地址。然而&#xff0c;由于地址分配的不均衡以及网络技术的…

【更具吸引力的回答】Java中final、finally、finalize的区别(一)

在Java中&#xff0c;final、finally和finalize是三个容易混淆的关键字&#xff0c;但它们各自具有不同的作用、用途和限制。下面我将从您提到的几个方面来解释它们之间的区别&#xff1a; 1. final 概念与用途&#xff1a;final关键字在Java中用于表示“不可变性”。它可以用…

rbac和多级请假业务系统相关面试题

1.请说明你的项目及使用的技术 面试官你好!这个项目是办公自动化OA系统,我们通过这个项目来对公司内部的一系列流程性的工作进行无纸化处理,比如公司内部的请假流程就是通过这个系统逐级进行审批,我在这个系统中主要负责底层框架的搭建以及去实现请假流程这个功能,本次项目…

算法有哪些分类

算法的分类可以根据不同的标准来进行&#xff0c;以下是一些常见的算法分类&#xff1a; 基本算法分类&#xff1a; 搜索算法&#xff1a;包括线性搜索、二分搜索、哈希搜索、深度优先搜索&#xff08;DFS&#xff09;、广度优先搜索&#xff08;BFS&#xff09;等。 排序算法…

Linux下工具tc详细讲解及限制IP和端口实例

首先纠正某一篇博客&#xff0c;TC并不是只管发包不管收包&#xff0c;之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress&#xff0c;如果父类不是他的话是完不成限制源IP的&#xff0c;这个关键词表明你正在添加一个入口队列规…

设计模式——模板模式(Template)

模板模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些特定步骤。 主…

软件测试至关重要

软件测试在现代软件开发流程中占据着至关重要的位置&#xff0c;它不仅是确保软件质量的关键环节&#xff0c;还直接关系到用户体验、企业信誉及成本控制等多个方面。 以下是软件测试重要性的几个核心论述&#xff1a; 1. 提升软件质量&#xff1a;软件测试通过识别和报告错误…

基于springboot实现智慧图书管理系统项目【项目源码+论文说明】

基于springboot实现智慧图书管理系统演示 摘要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为…

Docker操作之启动多个相同容器实例并nginx负载均衡

文章目录 前言 一、一些概念 1.Docker 2.nginx 二、操作步骤 1.构建compose.yaml 2.nginx配置 3.Docker compose命令 4.问题与解决 总结 前言 Docker对于开发、运维人员来说都很熟悉&#xff0c;但是对于开发人员来说&#xff0c;多数时候只需一个容器实例运行即可。…

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

python bisect 二分算法工具以及应用

python bisect 工具以及应用 主要用于在顺序固定的序列中查找以及插入 内置了四种方法 bisect_leftbisect_rightinsort_rightinsort_left bisect_left/right 方法找到应该插入元素的位置&#xff0c;对于和序列中元素不相同的值&#xff0c;两个方法返回的一样&#xff0c;对…

python数据处理(pandas)

# 新的数据格式&#xff0c;csv纯文本&#xff0c;使用某个字符集&#xff0c;比如都是ASCII、Unicode、EBCDIC或GB2312&#xff08;简体中文环境&#xff09;等&#xff1b;由记录组成&#xff08;典型的是每行一条记录&#xff09;每条记录被分隔符&#xff08;英语&#xff…

ffmpeg 7.0 + vs2022 +windows编译

后面有总结&#xff1a; 安装msys2 打开 &#xff08;这一步非常重要不然就得指定vs的环境&#xff09; x64 Native Tools Command Prompt for VS 2022运行 在x64 Native Tools Command Prompt for VS 2022命令行中切换到msys2安装目录中 打开 msys2_shell.cmd运行 安装 pa…

GNU/Linux - 如何使用lsmod和modinfo命令

How to Use the lsmod and modinfo Commands in Linux Linux 内核是模块化的&#xff0c;这意味着可以根据需要添加和删除模块。这就造就了一个轻量级、安全和轻便的内核。它的灵活性让你可以添加和删除你需要的功能&#xff0c;使操作系统符合你的使用情况和偏好。 The Linux …