Java解决不同路径问题2

Java解决不同路径问题2

01题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 10 来表示。

示例 1:

img

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

示例 2:

img

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

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j]01

02 知识点

  • 二维数组

  • 动态规划(DP)

  • 特殊情况分析

03 我的题解

public class dongtai02 {
	
	public static void main(String[] args) {
//		int[][] obstacleGrid = new int[][]{
//		                {0,0,0},
//		                {0,1,0},
//		                {0,0,0}
//						};
		int[][] obstacleGrid = new int[][]{
            {0,1},
            {0,0},
			};
						System.out.println(uniquePathsWithObstacles(obstacleGrid));
	}
	
	
	public static int uniquePathsWithObstacles(int[][] obstacleGrid) {
		//m为行数,n为列数
		int m=obstacleGrid.length;
		int n=obstacleGrid[0].length;
//		考虑两个特殊情况,数组第一个为1是,直接返回0
//		当数组中仅有一个数时,返回1
		if (obstacleGrid[0][0]!=0) {
			return 0;
		}
		if (m==1&&n==1) {
			return 1;
		}
		//用二维数组来记录走到每个格子需要多少种可能,非边缘格子的可能数为左方和上方的和
		int[][] nums=new int[m][n];
		
		//给第一行和第一列赋初始值为1,到达的可能为1种
		for (int i = 1; i < m; i++) {
			//因为是边缘,如果遇到石头就直接退出,剩下的格子到不了,默认为0
			if (obstacleGrid[i][0]==1) {
				break;
			}
			nums[i][0]=1;
		}
		for (int i = 1; i < n; i++) {
			if (obstacleGrid[0][i]==1) {
				break;
			}
			nums[0][i]=1;
		}
//		循环整个数组
		for (int i = 1; i < m; i++) {
			for (int j = 1; j < n; j++) {
//				如果原来的数组为1则结束本次循环
				if (obstacleGrid[i][j]==1) {
					continue;
				}
				//到达当前的格子的可能数为到达上一个格子的可能数之和
				nums[i][j]=nums[i-1][j]+nums[i][j-1];
			}
		}
		
		
		
		return nums[m-1][n-1];
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动云捐赠三款开源项目,加速新一代基础软件生态繁荣

随着云计算、大数据、人工智能等新领域新信息技术的发展&#xff0c;我国基础软件的自主可控极大程度地影响着产业链上下游的多样性和技术创新的发展空间。移动云作为中国移动涉云业务的主入口&#xff0c;一直坚持共享开源价值&#xff0c;积极推动中国开源软件生态的繁荣发展…

AWS 知识一:如何在AWS上启动云AD服务器(详细到极致)

前言&#xff1a; 首先这里指的云AD服务器&#xff0c;只是为了让读友更好理解。云AD服务器在AWS中称为目录。AWS一共提供了4种目录类别&#xff0c;下面我将全程使用AWS托管微软AD这种目录类别进行示例。他完全提供了和Microsoft AD的功能&#xff0c;包括NTLM&#xff0c;Ker…

机器学习基础实验(使用 Pandas 进行数据探索)

介绍 本次实验通过分析电信运营商的客户离网率数据集来熟悉 Pandas 数据探索的常用方法&#xff0c;并构建一个预测客户离网率的简单模型。 知识点 排列索引交叉表透视表数据探索 课程介绍 机器学习开放基础课程是蓝桥云课经由 Open Machine Learning Course 授权并制作的…

Oracle定时任务的创建与禁用/删除

在开始操作之前&#xff0c;先从三W开始&#xff0c;即我常说的what 是什么&#xff1b;why 为什么使用&#xff1b;how 如何使用。 一、Oracle定时器是什么 Oracle定时器是一种用于在特定时间执行任务或存储过程的工具&#xff0c;可以根据需求设置不同的时间段和频率来执行…

el-form与el-upload结合上传带附件的表单数据(后端篇)

1.写在之前 本文采用Spring Boot MinIO MySQLMybatis Plus技术栈&#xff0c;参考ruoyi-vue-pro项目。 前端实现请看本篇文章el-form与el-upload结合上传带附件的表单数据&#xff08;前端篇&#xff09;-CSDN博客。 2.需求描述 在OA办公系统中&#xff0c;流程表单申请人…

无约束优化问题求解笔记(1)

目录 1. 迭代求解的基本流程与停止准则1.1 迭代求解的基本流程1.2 停止准则1.3 收敛阶 2. 线搜索方法2.1 精确线搜索2.2 非精确搜索**Goldstein 准则****Wolfe 准则** 2.3 线搜索算法的收敛性 1. 迭代求解的基本流程与停止准则 1.1 迭代求解的基本流程 优化问题的解通常无法直…

[总线仲裁]

目录 一. 集中仲裁方式1.1 链式查询方式1.2 计数器查询方式1.3 独立请求方式 二. 分布式仲裁方式 总线仲裁是为了解决多个设备争用总线这个问题 \quad 一. 集中仲裁方式 \quad 集中仲裁方式: 就像是霸道总裁来决定谁先获得总线控制权 分布仲裁方式: 商量着谁先获得总线控制权 …

【六大排序详解】开篇 :插入排序 与 希尔排序

插入排序 与 希尔排序 六大排序之二 插入排序 与 希尔排序1 排序1.1排序的概念 2 插入排序2.1 插入排序原理2.2 排序步骤2.3 代码实现 3 希尔排序3.1 希尔排序原理3.2 排序步骤3.3 代码实现 4 时间复杂度分析 Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&am…

基于ssm高校推免报名系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把高校推免报名管理与现在网络相结合&#xff0c;利用java技术建设高校推免报名管理系统&#xff0c;实现高校推免报名的信息化。则对于进一步提高高校推免报名管理发展&#xff0c;丰富高校推免报名管理经验能起到不少的促进作用。…

智能优化算法应用:基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜜獾算法4.实验参数设定5.算法结果6.参考文献7.MA…

2023-12-20 二叉搜索树的最近公共祖先和二叉搜索树中的插入操作和删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 思想&#xff1a;和二叉树的公共最近祖先节点的思路基本一致的&#xff01;就是不用从下往上遍历处理&#xff01;可以利用的二叉搜索树的特点从上往下处理了&#xff01;而且最近公共节点肯定是第一个出现在【q&#xff0c;p】这个区间的内的&…

【已解决】vs2015操作创建声明定义由于以下原因无法完成

本博文解决这样的一个问题&#xff0c;就是vs2015下用qt&#xff0c;在快速创建槽函数时给笔者报了个错误&#xff0c;错误的完整说法是这样子的”操作创建声明/定义“由于下列原因无法完成&#xff0c;所选的文本不包含任何函数签名。第一次遇到这种花里胡哨的问题&#xff0c…

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例&#xff1a; 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规…

算法-滑动窗口类型

6666 滑动窗口 1、大小为K的最大和子数组 给定一个数组&#xff0c;找出该数组中所有大小为“K”的连续子数组的平均值。 让我们用实际输入来理解这个问题: Array: [1, 3, 2, 6, -1, 4, 1, 8, 2], K51、对于前5个数字(索引0-4的子数组)&#xff0c;平均值为:(1 3 2 6−…

贝蒂快扫雷~(C语言)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​&#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;贝蒂的游戏 贝蒂的主页&#xff1a;Betty‘s blog 引言&#xff1a; 扫雷相信大家小时候到玩过吧&#xff0c;那…

Gin之GORM多表关联查询(多对多;自定义预加载SQL)

数据库三个,如下: 注意:配置中间表的时候,表设计层面最好和配置的其他两张表契合,例如其他两张表为fate内的master和slave;要整合其对应关系的话,设计中间表的结构为master_id和slave_id最好(不然会涉及重写外键的操作) 重写外键(介绍) 对于 many2many 关系,连接表…

DBdoctor,致力于解决数据库的一切性能问题

17(一起)&#xff0c;这是我的幸运数字&#xff0c;恰巧今年8月17日在DTCC大会上我们全网首次发布DBdoctor&#xff0c;今天同样是17日&#xff0c;在全网首发整四个月后我们发布重磅大版本V3.1。值此重大更新之际&#xff0c;想与各有识之士深度聊一下这款产品&#xff0c;以及…

【LeetCode刷题】--244.最短单词距离II

244.最短单词距离II 方法&#xff1a;哈希表双指针 class WordDistance {HashMap<String,List<Integer>> map new HashMap<>();public WordDistance(String[] wordsDict) {int len wordsDict.length;for(int i 0;i< len;i){String word wordsDict[i];…

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…

2023年12月20日学习总结

今日to do list&#xff1a; 学习kaggle中store sales中的dart forcasting&#x1f3af; 大概搜集一个声纹识别的报告&#xff08;老师给的新项目&#x1f62d;&#xff09; 学习时不刷手机 okkkkkkkkkkkkkk 开始&#x1f44d; 1. 时间序列预测- a complete guide 总结一下这…