33 动态规划和递归求解不同路径II

问题描述:一个机器人位于一个m×n网格的左上角(起始点在下图中标记为Start),机器人每次只能向下或者向右移动一步,机器人试图到达网格的右下角,机器人试图到达网格的右下角,现在考虑网格中有障碍物,那么从左上角到右下角有多少条路径。

递归求解:可以用一个引用数据类型Integer来存储

public void pathNum(int [][]matrix,int rowIndex,int columnIndex, Integer intNumber)
{
if(rowIndex==matrix.length||columnIndex==matrix[0].length||matrix[rowIndex][columnIndex]==1)
return;
if(rowIndex==matrix.length-1&&columnIndex==matrix[0].length-1)
{
intNumber+=1;
return;
}
pathNum(matrix,rowIndex+1,columnIndex,intNumber);
pathNum(matrix,rowIndex,columnIndex+1,intNumber);
}
public int PathNum(int[][]matrix)
{
Integer intNumber=new Integer(0);
pathNum(matrix,0,0,intNumber);
​​​​​​​return intNumber.parseInt();}

递归求解的第二种解法:每次统计子分组的个数,并且使用map进行统计,进行优化

public int pathNum(int [][]matrix,int rowIndex,int columnIndex,Map<String,Integer> map)
{
if(rowIndex==matrix.length||columnIndex==matrix[0].length||matrix[rowIndex][columnIndex]==1)
return 0;
if(rowIndex==matrix.length-1&&columnIndex==matrix[0].length-1)
{
return 1;
}
if (map.containsKey(rowindex+"-"+columnIndex))
return map.get(rowindex+"-"+columnIndex);
else
{
int pathNumber=pathNum(matrix,rowIndex+1,columnIndex,map)+pathNum(matrix,rowIndex,columnIndex+1,map)
map.put(rowindex+"-"+columnIndex,pathNumber);
}
return map.get(rowindex+"-"+columnIndex);
}public int PathNum(int [][]matrix)
{
Map<String,Integer> map=new HashMap<>();
pathNum(matrix,0,0,map);
return map.get((matrix.length-1)+"-"+(matrix[0].length-1));
}

动态规划方法求解:定义dp[i][j]为从开头到[i][j]位置的条数,如果matrix[i][j]==1,则dp[i][j]=0;

public int pathNum(int [][]nums)
{
int []dp=new int [nums.length][nums[0].length];
dp[0][0]=1;
for(int i=1;i<nums.length;i++)
{
for(int j=1;j<nums[i].length;j++)
{
if(nums[i][j]==0)
{
dp[i][j]==0;
}
else
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
}
return dp[nums.length-1][nums[0].length];
}

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

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

相关文章

第2章 线性结构

一、选择题 1. 顺序存储结构的优点是&#xff08; A &#xff09; A&#xff0e;存储密度大 B&#xff0e;插入运算方便 C&#xff0e;删除运算方便 D&#xff0e;可用于各种逻辑结构的存储表示 2. 下面关于线性表的叙述中&#xff0c;错误的是&#xff08; B…

ACL原理和配置

一.ACL概述 1.介绍 ACL 访问控制列表&#xff0c;可以通过对网络中报文流的精确识别&#xff0c;与其他技术结合&#xff0c;达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的&#xff0c;从而切实保障网络环境的安全性和网络服务质量的可靠性。 2.概述 ACL是…

ShenYu网关注册中心之Zookeeper注册原理

文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 ZookeeperClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解&#xff0c;注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disrupto…

[C语言]大小端及整形输出问题

假设在一个32位little endian 的机器上运行下面的程序&#xff0c;结果是多少 ? 1.1先看以下三个程序 #include <stdio.h> int main() {long long a 1, b 2, c 3;printf("%lld %lld %lld\n", a, b, c); // 1 2 3printf("%d %d %d %d %d %d\n&quo…

LeetCode第376场周赛

文章目录 1.Find Missing and Repeated Values2.Divide Array Into Arrays With Max Difference3.Minimum Cost to Make Array Equalindromic 1.Find Missing and Repeated Values 直接暴力过 class Solution { public:vector<int> findMissingAndRepeatedValues(vecto…

Learning Semantic-Aware Knowledge Guidance forLow-Light Image Enhancement

微光图像增强&#xff08;LLIE&#xff09;研究如何提高照明并生成正常光图像。现有的大多数方法都是通过全局和统一的方式来改善低光图像&#xff0c;而不考虑不同区域的语义信息。如果没有语义先验&#xff0c;网络可能很容易偏离区域的原始颜色。为了解决这个问题&#xff0…

c语言-全局变量与局部变量

目录 1、&#xff08;作用&#xff09;域的概念 2、全局与局部的相对性 3、生命周期 3、静态变量static 结语&#xff1a; 前言&#xff1a; 在c语言中&#xff0c;全局变量的可见范围是整个工程&#xff0c;而局部变量的可见范围从该变量被定义到该作用域结束&#xff0c…

JavaScript装饰者模式

JavaScript装饰者模式 1 什么是装饰者模式2 模拟装饰者模式3 JavaScript的装饰者4 装饰函数5 AOP装饰函数6 示例&#xff1a;数据统计上报 1 什么是装饰者模式 在程序开发中&#xff0c;许多时候都我们并不希望某个类天生就非常庞大&#xff0c;一次性包含许多职责。那么我们就…

【JavaEE】多线程(5) -- 阻塞队列

目录 1.阻塞队列是什么? 2.生产者消费者模型 3.标准库中的阻塞队列 4.阻塞队列的实现 1.阻塞队列是什么? 阻塞队列是⼀种特殊的队列. 也遵守 "先进先出" 的原则 阻塞队列能是⼀种线程安全的数据结构, 并且具有以下特性: 当队列满的时候, 继续⼊队列就会阻塞, …

I/O流的相关内容

首先我们了解一下什么是文件&#xff1a; 文件其实就是让我们用来保存数据的地方&#xff0c;它可以用来保存信息&#xff0c;图片&#xff0c;以及音频等各类数据。 文件流&#xff1a; 那我们是如何通过我们的程序来进行对文件的操作呢&#xff1f;这里我们就要提出一个概…

wpf将静态变量绑定到控件属性

有时候需要将后台一个静态属性绑定到xaml前台&#xff0c;经过实践&#xff0c;有如下两种绑定的方式 例如后台声明一个类&#xff0c;类中包含静态变量&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T…

Crow:Middlewares 庖丁解牛2 产生序列

include\crow\utility.h内有这样一段比较晦涩难懂的代码: template<class T> using Invoke = typename T::type;template<unsigned...> struct seq {using type = seq; };template<class S1, class S2> struct concat;template<unsigned... I1, unsigne…

2023年金属非金属矿山(地下矿山)安全管理人员证模拟考试题库及金属非金属矿山(地下矿山)安全管理人员理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员证模拟考试题库及金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员理论考试试题是由安全生产模拟考试一点通提供&#xff0c;金属非金…

【linux--进程通信之共享内存】

目录 一、共享内存的原理二、共享内存的数据结构三、共享内存使用的函数2.1ftok函数2.2shmget函数2.3shmctr函数2.4shmat函数2.5shmdt函数 四、实现进程通信 一、共享内存的原理 共享内存实际是操作系统在实际物理内存中开辟的一段内存。 共享内存实现进程间通信&#xff0c;是…

大数据之如何利用爬虫爬取数据做分析

目录 前言 爬虫概述 爬虫实现 1. 获取代理IP 2. 爬取数据 3. 多线程爬取 总结 前言 随着互联网和智能设备的普及&#xff0c;数据量逐年增长&#xff0c;数据分析和挖掘成为了热门领域&#xff0c;其中大数据分析技术和爬虫技术是重要的手段之一。本文主要介绍如何使用…

Python框架批量数据抓取的高级教程

一、背景介绍 批量数据抓取是一种常见的数据获取方式&#xff0c;能够帮助我们快速、高效地获取网络上的大量信息。本文将介绍如何使用Python框架进行大规模抽象数据&#xff0c;以及如何处理这个过程中可能遇到的问题。 二、项目需求 我们将爬取大量知乎文章&#xff0c;讨…

扁平化菜单功能制作

网页效果&#xff1a; HTML部分&#xff1a; <body><ul class"nav"><li><a href"javascript:void(0);">菜单项目一</a><ul><li>子菜单项01</li><li>子菜单项02</li><li>子菜单项03<…

matlab面向对象编程入门笔记

文章目录 1. 类和结构2. 定义类3. 属性3.1 private/protected/public属性3.2 constant属性3.3 hidden属性 4. 方法4.1 private/protected/public方法4.2 static方法4.3 外部方法 5. 动态调用6. 继承-超类6.1 handle超类6.2 dynamicprops 和 hgsetget子类 7. 封闭(sealed)类、方…

spring 项目中如何处理跨越cors问题

1.使用 CrossOrigin 注解 作用于controller 方法上 示例如下 RestController RequestMapping("/account") public class AccountController {CrossOriginGetMapping("/{id}")public Account retrieve(PathVariable Long id) {// ...}DeleteMapping(&quo…

波奇学Linux:Linux进程状态,进程优先级

编写一个程序模拟进程 查看进程状态 修改代码后发现进程状态为由S变成R R为运行态&#xff0c;S为阻塞态 第一次为S是因为调用了外设&#xff08;printf调用屏幕外设&#xff09;&#xff0c;实际上应该为R&#xff0c;S状态轮换&#xff0c;但是R太快了&#xff0c;所以每次…