代码随想录算法训练营第四十二天|62.不同路径、63. 不同路径 II

news2024/11/16 10:16:54

62.不同路径

文档讲解:代码随想录

题目链接:. - 力扣(LeetCode)

 

记录每个格子的状态 二维矩阵-->二维dp数组

dp数组

题目是要求到达最后一个格子有多少种路径

所以dp[i,j]: 到达第(i,j)个格子有多少种路径

递推公式

到达一个格子只能是由上一个格子向右走或者向下走,所以目标格子的前一个格子有如下几种情况:

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

dp数组如何初始化

dp[0,i]=1,dp[0,j]=1

遍历顺序

初始值在左上面

从上向下,从左向右

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[0] * n for _ in range(m)]
        #初始化第一行
        for j in range(0,n):
            dp[0][j] = 1
        #初始化第一列
        for i in range(0,m):
            dp[i][0] = 1
        #递推,从上往下,从左往右
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j] = dp[i][j-1] + dp[i-1][j]
        return dp[m-1][n-1]

63. 不同路径 II

文档讲解:代码随想录

题目链接:. - 力扣(LeetCode)

 遇上一题类似

递推公式加了一个前提条件,[i][j]需要没有障碍

最大的差异在于初始化:遇到一个障碍之后,第一列和第一行后面的值就都是0了

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        n = len(obstacleGrid[0])
        m = len(obstacleGrid)
        print(m,n)
        dp = [[0] * n for _ in range(m)]
        #初始化第一行
        for j in range(0,n):
            if obstacleGrid[0][j]!=1:
                dp[0][j] = 1
            else:
                break
        #初始化第一列
        for i in range(0,m):
            if obstacleGrid[i][0]!=1:
                dp[i][0] = 1
            else:
                break
        #递推,从上往下,从左往右
        for i in range(1,m):
            for j in range(1,n):
                if obstacleGrid[i][j]!=1:
                    dp[i][j] = dp[i][j-1] + dp[i-1][j]
        return dp[m-1][n-1]

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

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

相关文章

vue+three.js实现3d系统的搭建

1.首先node.js是12.22版本的,安装three.js可以参考这篇文章 直接用Threejs入门-安装教程_安装three.js-CSDN博客 直接在终端安装three.js即可 npm install --save three 在相同目录下安装vite构建工具 npm install --save-dev vite 在项目里面看package.json中…

1688 API接口介绍:开启您的电商新篇章

什么是1688 API接口? API(Application Programming Interface,应用程序编程接口)是一组协议和工具,用于定义不同的软件应用程序如何彼此交互。1688 API接口则是1688平台为商家提供的一套接口规范,允许商家…

浏览器提示网站不安全怎么办?有什么解决办法吗?

当你在浏览器中访问一个网站时,如果看到提示说该网站不安全,这通常是由于网站没有使用SSL证书或者SSL证书存在问题。SSL证书在这里扮演着非常关键的角色,下面我会详细解释它的作用以及如何解决这类不安全提示。 SSL证书的作用: 1…

德邦快递和德邦物流运费标准哪个更划算?怎样才能便宜的寄大件快递?

在寄大件包裹快递时,我们一般都知道选择德邦,那么德邦快递和德邦物流的收费标准哪个更划算呢?下面,让我们一起来了解德邦快递和德邦物流的收费标准,以及如何根据实际情况做出最佳选择。 首先了解快递费用构成 快递费用…

OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI(一)

引言 在Android中Java可以通过JNI 与C/C 通信,而在OpenHarmony 中前段语言目前是ETS,那么OpenHarmony中的 “JNI” 角色是什么呢? 一、NAPI概述 NAPI全称Native Application Programming Interface(最新版的文档已经改为Node-A…

java医院管理系统源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 医院管理系统的主要使用者分…

【IDEA】Redis可视化神器

在开发过程中,为了方便地管理 Redis 数据库,我们可能会使用一些数据库可视化插件。这些插件通常可以帮助你在 IDE 中直观地查看和管理 Redis 数据库,包括查看键值对、执行命令、监视数据库活动等。 IDEA作为IDE界的Jenkins,本身自…

软件项目管理 - 作业集合

软件项目管理 - 作业集合 作业一 1、项目与日常运作的主要区别有哪些? 项目:为提供一项独特产品、服务或成果所做的临时性努力 运作:连续不断周而复始的活动 项目是一次性的,日常运作是重复进行的; 项目是以目标为导…

Spring AOP基于动态代理的实现的 AOP

目录 代理什么是代理代理模式 静态代理动态代理JDK动态代理CGLIB动态代理Spring AOP使用的是哪种代理? 代理 什么是代理 生活中的代理 房产中介 : 房屋进行租赁时,卖方会把房子授权给中介,由中介代理带客户看房,商谈…

线段树例题

目录 1.Sequence 2.Peach Conference 3.Permutation Subsequence 1.Sequence 题目描述: Given an array a consisting of n integers, on which you are to perform m operations of two types. 1.Given two integers x,y, replace the number of index x with n…

httpsok-v1.12.0支持LB证书自动部署

🔥httpsok-v1.12.0支持LB证书自动部署 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,基于全新的设计理念,专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业,稳定、安全、可靠。 一行命令,一分钟轻松搞…

console.log——NPM库

前期回顾 Vue3 TS 项目实战 - 后台管理系统 - 按钮权限_vue3ts后台管理-CSDN博客 目录 🚩不使用NPM插件的方式 第一步:创建log函数-源码 第二步:注册到window上 第三步:扩展Window接口 第四步:确保类型文件…

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先 leetcode 530.二叉搜索树的最小绝对差 题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/ 题目: 给你一个二叉搜索树的根节点 r…

【Qt】Qt定时器类QTimer

在进行窗口程序的处理过程中, 经常要周期性的执行某些操作, 或者制作一些动画效果,看似比较复杂的问题使用定时器就可以完美的解决这些问题, Qt中提供了两种定时器方式一种是使用Qt中的事件处理函数这个在后续章节会给大家做细致的讲解,本节主…

常用目标检测预训练模型大小及准确度比较

目标检测是计算机视觉领域中的一项重要任务,旨在检测和定位图像或者视频中的目标对象。当人类观看图像或视频时,我们可以在瞬间识别和定位感兴趣的对象。目标检测的目标是使用计算机复制这种智能。 近年来,目标检测网络的发展日益成熟&#…

设计模式基础——设计原则介绍

1.概述 ​ 对于面向对象软件系统的设计而言,如何同时提高一个软件系统的可维护性、可复用性、可拓展性是面向对象设计需要解决的核心问题之一。面向对象设计原则应运而生,这些原则你会在设计模式中找到它们的影子,也是设计模式的基础。往往判…

力扣刷题--1528. 重新排列字符串【简单】

题目描述 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s “codeleet”, indices [4,5,6,7,0,2,1,3] 输…

OpenMV的VisionBoard视觉识别开发板学习记录

此篇博客仅用于对VisionBoard的开发板的学习研究记录,没有教学内容。 一、资料来源 开发板资料链接 开发板环境搭建手册 开发板视频教程 板子的资料网站 openmv官方的网站 目录 一、资料来源二、针对 VisionBoard的目标识别和定位总结1. 目标识别功能1.1 物体检测…

大模型时代:生活将如何被重塑?

大模型时代:生活将如何被重塑? 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享…

数据挖掘与机器学习——回归分析

目录 回归分析定义: 案例: 线性回归 预备知识: 定义: 一元线性回归: 如何找出最佳的一元线性回归模型: 案例: python实现: 多元线性回归 案例: 线性回归的优缺…