不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)
示例 1:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有2
条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右 思路分析这个问题和上一篇路径题的分析一样,不同之处在于,加了障碍物。那么我们可以重新定义一个二维数组,用来返回路径数,具体思路见代码注释。
public static int uniquePathsWithObstacles(int[][] arr) {
int m = arr.length;
int n = arr[0].length;
//如果起始位置和终点位置为1,直接返回0
if(arr[0][0] == 1 || arr[m-1][n-1] == 1) return 0;
//如果m == 1,判断第m-1行是不是有1,有1直接返回0,否则返回1
if(m == 1) {
for(int j = 1;j<n;j++) {
if(arr[0][j] == 1)
return 0;
}
return 1;
}
//如果n == 1,判断第n-1列是不是有1,有1直接返回0,否则返回1
if(n == 1) {
for(int i = 1;i < m;i++) {
if(arr[i][0] == 1)
return 0;
}
return 1;
}
//定义和输入数组arr一样大小的数组,作为判断
int[][] array = new int[m][n];
for(int j = 1;j<n;j++) {
//判断arr[0][j]是否等于1,如果不等于1,那么array[0][j]等于0,如果等于1,
//从j列开始到j<n,array[0][j]全部赋值为0
if(arr[0][j] == 0) {
array[0][j] = 1;
}else {
for(int k = j;k<n;k++) {
array[0][k] = 0;
}
break;
}
} for(int i = 1;i<m;i++) {
//判断arr[i][0]是否等于1,如果不等于1,那么array[i][0]等于0,如果等于1,
//从i行开始到i<m,array[i][0]全部赋值为0
if(arr[i][0] == 0) {
array[i][0] = 1;
}else {
for(int k = i;k<m;k++) {
array[k][0] = 0;
}
break;
}
} for(int i = 1;i<m;i++) {
for(int j = 1;j<n;j++) {
//如果arr[i][j] == 1,array = 0,否则array[i][j] = array[i-1][j] + array[i][j - 1]
if(arr[i][j] == 0) {
array[i][j] = array[i-1][j] + array[i][j - 1];
}
}
}
//返回数组array最后一个数
return array[m-1][n-1];
}
不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)的更多相关文章
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)
示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角. 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -&g ...
- LeetCode:不同路径&不同路径II
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问 ...
- [LeetCode] 63. 不同路径 II ☆☆☆(动态规划)
描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...
- Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II)
Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II) 初级题目:Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机 ...
- Java实现 LeetCode 63 不同路径 II(二)
63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...
- 刷题-力扣-63. 不同路径 II
63. 不同路径 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths-ii/ 著作权归领扣网络所有.商业转 ...
- [Swift]LeetCode63. 不同路径 II | Unique Paths II
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- LeetCode(63):不同路径 II
Medium! 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“F ...
随机推荐
- Ex 2_5 求解递推式..._第三次作业
- 22)django-中间件
一:中间件介绍 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后, django会根据自己的规则在合适的时机执行中间件中相应的方法. 在dj ...
- linux学习之uniq
uniq最经常用的是统计次数,通常先排序,然后uniq -c cat a.txt |sort -nr |uniq -c
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...
- Confluence 6 手动备份站点
Confluence 被配置自动备份数据,使用压缩的 XML 格式.同时你也可以通过 Confluence 的 管理员控制台(Administration Console)手动进行备份. 你需要具有 ...
- yum -y 与yum有何区别(转载)
在linux中,经常使用yum来进行软件的安装,更新与卸载,那我们会发现,在使用yum的时候,通常有下面两种指令模式: ①yum install xxx ②yum -y install ...
- ionic3 调用摄像头 当键盘弹出时候 出现摄像头 背景
iOS 端毫无 bug,Android 端却出现了问题.当软键盘弹出后,Android 端的 tabs 移到了软键盘的上面,再仔细一看,整个界面都被压扁了,输入框也不知道去哪儿了. 于是去翻 Ioni ...
- 【ES】学习9-聚合2
按时间统计:date_histogram GET /cars/transactions/_search { , "aggs": { "sales": { &qu ...
- 《剑指offer》 合并两个排序的链表
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...
- Linux下source命令详解
source命令用法 source FileName source命令作用 在当前bash环境下读取并执行FileName中的命令. *注:该命令通常用命令“.”来替代. 使用范例: source f ...