【刷题笔记】——day.4 路径问题总结

2023-11-06

学习目标:

用于记录每日刷的题目为了明年的python组蓝桥杯做准备,今天是打卡的第四天,冲!

 


原题一 :不同路径

题目描述:

一个机器人位于一个 m x n 网格的左上角 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,问总共有多少条不同的路径?

示例一: 

输入:m = 3, n = 7
输出:28

示例二: 

输入:m = 3, n = 2
输出:3


 题解:

思路(动态规划):

1.由于机器人只能向下或向右走,所以对于每个点的路径就等于每个点上位置和左位置的路径的总和。

2.机器人从(0,0)出发,到达(m-1,n-1)终点,要用动态规划,首先要明确dp[i][j]的含义和其下标的含义,dp[i][j]:表示从(0,0)出发到达(i,j)的总路径数。

3.确定递推公式,自然的就能写出 dp[i][j] = dp[i-1][j] + dp[i][j-1]

4.特殊位置: 对于第一行格子,只能从左边到达 所以递推公式为 dp[i][j] = dp[i][j-1] ;

同理对于第一列的格子,只能从上边到达 所以递推公式为 dp[i][j] = dp[i-1][j]

 代码实现(python):

def uniquePaths(m, n):
    dp = [[0]*n]*m   #定义一个m*n维的矩阵
    for i in range(m):
        for j in range(n):
            if i == 0 and j == 0:   #初始化 dp[0][0]
                dp[i][j] = 1
                continue
            if i > 0 and j > 0:
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
            elif i > 0:
                dp[i][j] = dp[i-1][j]
            elif j > 0:
                dp[i][j] = dp[i][j-1]
    return dp[m-1][n-1]

原题二:不同路径II

题目描述:

一个机器人位于一个 m x n 网格的左上角 ,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。

示例一 :

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2

示例二: 

输入:obstacleGrid = [[0,1],[0,0]]
输出:


  题解:

 思路(动态规划):

与上题的思路类似,只是在基础上加上了障碍物。不难想到,只要判断 obstacleGrid[i][j]是否初始值是 1。如果是 1,则没有路能到达,对应的 dp[i][j] =0,其他的思想和上题类似。

代码实现(Python):

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid):
        row = len(obstacleGrid)   
        column = len(obstacleGrid[0])
        if obstacleGrid[0][0]==1:   #如果[0][0]点有障碍物,则无法到达终点
            return 0
        obstacleGrid[0][0]=1   #初始化dp[0][0]
        for i in range(row):
            for j in range(column):
                if i==0 and j==0:
                    continue
                if obstacleGrid[i][j] == 1:  #如果有障碍物,则让dp[i][j] = 0
                    obstacleGrid[i][j] = 0
                    continue
                if i>0 and j>0:
                    obstacleGrid[i][j] = obstacleGrid[i-1][j]+obstacleGrid[i][j-1]
                elif i>0:
                    obstacleGrid[i][j] = obstacleGrid[i-1][j]
                elif j>0:
                    obstacleGrid[i][j] = obstacleGrid[i][j-1]
        return obstacleGrid[row-1][column-1]

 原题三:最小路径和

题目描述:

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例一: 

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1 到 3 到 1 到 1 到 1 的总和最小。

示例二:

输入:grid = [[1,2,3],[4,5,6]]
输出:12


题解:

思路(动态规划):

1.与前两道题类似,只是再原先的基础将路线上加权,求经过的路线权和的最小值。0

2.结合上两道题的思路,递推则为每个点的权数加上左边路径的最小权和或上边路径的最小权和的最小值,很容易就能写出新的递推公式 dp[i][j] = grid[i][j] + min(dp[i-1][j],dp[i][j-1])

 代码实现(Python):

class Solution:
    def minPathSum(self, grid):
        row = len(grid)  #确定行数
        column = len(grid[0])   #确定列数
        dp = [[0]*column]*row
        for i in range(row):
            for j in range(column):
                if i == 0 and j==0:
                    dp[0][0] = grid[0][0]
                if i > 0 and j >0:
                    dp[i][j] = grid[i][j]+min(dp[i-1][j],dp[i][j-1])  #递推
                elif i > 0:
                    dp[i][j] = grid[i][j] + dp[i-1][j]   #边界情况
                elif j >0:
                    dp[i][j] = grid[i][j] + dp[i][j-1]   #边界情况
        return dp[row-1][column-1]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【刷题笔记】——day.4 路径问题总结 的相关文章

随机推荐

  • mybatis的if else怎么写

    书接上文关于SQL注入的问题 就是 符号换成 号 替代问题其实还好 大部分都是可以直接替代的 但是部分还是不行 举个例子group by 和 order by的字段就不行了 解决方案就是根据我传过去的值做判断 比如传的是 id 实际上 会在
  • 寻找2020——2020蓝桥杯javaB组

    寻找2020 问题描述 小蓝有一个数字矩阵 里面只包含数字 0 和 2 小蓝很喜欢 2020 他想找 到这个数字矩阵中有多少个 2020 小蓝只关注三种构成 2020 的方式 同一行里面连续四个字符从左到右构成 2020 同一列里面连续四个
  • Jmeter数据驱动执行无反应

    一 问题 按照网上教程编写数据驱动文件后进行执行时 察看结果树无任何反应和提示 PS excel中params参数可以用 进行连接 二 进入菜单栏 选项 gt 日志查看打钩 查询到如下log信息 2021 07 06 16 06 21 98
  • 使用Charles进行HTTPS抓包及常见问题

    Charles下载地址 https www charlesproxy com download 第一步 配置HTTP代理 设置代理 主界面 Proxy Proxy Settings 选择在8888端口上监听 然后确定 勾选了SOCKS pr
  • HTML DOM Document对象

    HTML DOM 节点 在 HTML DOM Document Object Model 中 每一个元素都是 节点 文档是一个文档节点 所有的HTML元素都是元素节点 所有 HTML 属性都是属性节点 文本插入到 HTML 元素是文本节点
  • Spring事务UnexpectedRollbackException异常抛出原因深度分析及解决方案

    Transaction rolled back because it has been marked as rollback only 中文翻译为 事务已回滚 因为它被标记成了只回滚 这个异常 相信写代码多年的大家 都遇到过 什么原因呢 今
  • 常见漏洞细细分类

    从提交列表中整理了一份 常见漏洞细细分类 腾讯安全应急响应中心 Web漏洞 普通反射型XSS 存储型XSS 基于DOM的XSS 基于Flash的XSS 命令注入 SQL注入 上传漏洞 信息泄漏 SSRF漏洞 读类型CSRF 写类型CSRF
  • CentOS7安装MySQL8

    文章目录 一 前言 二 Centos 7 安装 mysql8 步骤 1 下载MySQL官方的 Yum Repository 2 安装 方法一 用wget 下载后安装 方法二 下载 RMP 软件包将该软件包上传到 Linux 服务器 并安装
  • html 微信声音自动播放 和 滑动屏幕播放

    html 微信声音自动播放 和 滑动屏幕播放
  • 【Flutter 2-3】Flutter手把手教程UI布局和Widget——容器控件Container

    作者 弗拉德 来源 弗拉德 公众号 fulade me Container 我们先来看一下Container初始化的参数 Container Key key 位置 居左 居右 居中 this alignment EdgeInsets Con
  • C++的std::vector<bool>转储文件

    文章目录 前言 获取数据源地址 MSVC GCC 数据地址获取方法 结果 总结 前言 总所周知 C 的std vector
  • Mac 双系统之windows坏了咋办

    1 背景 Mac mini 装了个双系统 windows 系统太慢 准备重装 本来想着直接恢复出厂 结果根本不能这么操作 由于默认启动盘设置的是windows系统 然后就出现了 起不来的情况 其实之前也遇到过 就是忘了 折腾了好久这里记录一
  • React-router导入Link报错

    按以下导入 出现 Link is not exported from react router 错误 import Router Route Link from react router 解决方案 yarn add react router
  • Python音视频开发:消除抖音短视频Logo的图形化工具实现过程详解

    前往老猿Python博文目录 一 引言 在 Python音视频开发 消除抖音短视频Logo和去电视台标的实现详解 节介绍了怎么通过Python Moviepy OpenCV实现消除视频Logo的四种方法 并提供了详细的实现思路和实现代码 但
  • Kitti Stereo dataset 2015

    发现国内很多人分享kitti目标检测数据集 但少有分享立体匹配数据集的朋友 所以特做此分享 下载链接 2015 https s3 eu central 1 amazonaws com avg kitti data scene flow zi
  • 立创3D导入AD+AD的板子颜色改变

    立创3D导入AD AD的板子颜色改变 文章目录 立创3D导入AD AD的板子颜色改变 介绍 结果图展示 环境情况 3D板子换颜色 3D模型的寻找 3D模型的导入 总结 介绍 AD中默认的绿色板子一点逼格都没有 还缺了很多3D封装 想美化下
  • 提交form表单 报错:POST http://localhost:8080/user/login 404 原因及解决方法

    原因 1 input没有设置name属性 jquery获取不到 更新 文章里边举得例子 稍微有点不恰当 button 千万不要用input标签 要不然servlet就会从它上获取数据 结果还会报错 报这种错误 说明jquery库中的方法 运
  • 前端的对决:React的JSX与Vue的templates

    请点击此处输入图片描述 React js和Vue js是这个星球上最流行的JavaScript库 它们都很强大 相对来说很容易获取和使用 React和Vue的共性 使用虚拟DOM 提供响应式视图组件 专注于开发过程中的一个方面 目前集中在视
  • 因为git忽略大小写而浪费的一天一夜修复bug

    改了多语言文件名 将小写改为大写 vite项目重新发布后 测试环境报找不到这个文件的错误 心路历程分析 1 第一反应是缓存问题 后清除浏览器缓存 vite项目版本号改动 强制清除vite包缓存 使用 force命令 报错 需要再研究一下 都
  • 【刷题笔记】——day.4 路径问题总结

    学习目标 用于记录每日刷的题目为了明年的python组蓝桥杯做准备 今天是打卡的第四天 冲 原题一 不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 问总共有多