问题描述:
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0] ]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
原问题链接:https://leetcode.com/problems/unique-paths-ii/
问题分析
这个问题和前面的问题很类似,唯一一个差别就是因为有了矩阵obstacleGrid。它里面所有标记为1的元素在对应的表示路径数量的矩阵matrix里对应的值为0。而且,在最开始设定条件的时候,最旁边的一行和一列,也就是matrix[m - 1][i], matrix[i][n - 1],它们在从最底角向上遍历的时候,如果一碰到对应的obstacleGrid元素为1,则可以直接跳出循环。因为有了这么一个点,它前面的路径都没法通过,也就是路径数为0。
在实现里再结合前面的条件matrix[i][j] = matrix[i + 1][j] + matrix[i][j + 1],我们可以很容易实现如下的代码:
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length; int n = obstacleGrid[0].length; int[][] matrix = new int[m][n]; if(obstacleGrid[m - 1][n - 1] == 1) return 0; for(int i = n - 1; i >= 0; i--) { if(obstacleGrid[m - 1][i] == 1) break; matrix[m - 1][i] = 1; } for(int i = m - 1; i >= 0; i--) { if(obstacleGrid[i][n - 1] == 1) break; matrix[i][n - 1] = 1; } for(int i = m - 2; i >= 0; i--) { for(int j = n - 2; j >= 0; j--) { if(obstacleGrid[i][j] == 1) matrix[i][j] = 0; else matrix[i][j] = matrix[i + 1][j] + matrix[i][j + 1]; } } return matrix[0][0]; } }
相关推荐
leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 python,部分有解释 Java,部分有解释 Java Associated Documents and Resources Peter norvig神牛Python代码写的很飘逸,果然是有LISP...
II mod之后,可能数学公式就不能简单地给出答案了。但对我来说,其实和前一题没区别。动态规划处理这种问题,早就是牛刀杀鸡了。。 Single Number 碰巧我知道异或的解法。如果不知道的话,想想还是有点费事的。 ...
leetcode 【演示记录】 报告 展示 2017/03/06 1.二和,167.二和二 2107/03/06 15.3 总和,16.3 总和最近,18.4 总和,11.最多水的容器 2017/03/09 62.Unique Paths, 63.Unique Paths II, 64.Minimum Path Sum 2017/...
例如,"Unique Paths" (题号 62) 需要计算一个机器人到达目标位置的路径数量。 8. **深度优先搜索 (DFS)** 和 **广度优先搜索 (BFS)**:这两种搜索算法常用于解决各种问题,如迷宫求解、岛屿计数等。 9. **排序和...
【描述】"leetcode63" 提到的这个问题,全称为“Unique Paths II”,是LeetCode中的一个经典问题。在这个问题中,任务是计算一个机器人从左上角到达右下角有多少种不同的路径。与标准的“Unique Paths”问题相比,...
扩展矩阵leetcode ...uniquePaths 63.不同路径II uniquePathsWithObstacles 139.单词拆分 wordBreak 279.完全平方数 numSquares 排序 56.合并区间 merge 75.颜色分类 sortColors 179.最大数 largestNumber 324.摆
javascript js_leetcode题解之63-unique-paths-ii.js
leetcode 530 力码 全部的: 易(173/237+x) 中(144/437+x) 硬(4/x) 问题 1.Two Sum(dict) 7.(跳过)(数学) 9.(跳过)(串串技巧) 11.盛水最多的容器 12.(跳过)(问题不好) 13.(跳过)(蛮力) 14.(跳过)...
javascript js_leetcode题解之62-unique-paths.js
1、记忆化 2、二维dp 3、滚动优化
43. Unique Paths:机器人在一个 m x n 的网格中从左上角移动到右下角,有多少不同的路径。 44. Unique Paths II:与 Unique Paths 类似,但是考虑网格中障碍物的处理。 45. Maximum Sum Subarray:找出一个数字序列...
unique_paths.py(类似于 chess_board.c!)+ unique_paths2.py chess_board.c 效率测试 bin_search.py 素数.py 零知识.py Leetcode:现在很多小方案都是leetcode,我主要是为了好玩。 著名算法:Knuth-Morris-Pratt...
63.Unique Paths II 64.最小路径和 70.爬楼梯 72.编辑距离 122. 买卖股票的最佳时机 II 152.最大积子阵列 198.强盗 322.硬币变化 贪心算法 45.跳跃游戏II 55.跳跃游戏 哈希 1.二和 3.最长不重复字符的子串 49.组字谜...
- **Unique Paths**:计算机器人到达目标位置的唯一路径数。 - **Maximum Subarray**:寻找数组中的最大子数组和。 - **Climbing Stairs**:模拟爬楼梯,每次可以爬1阶或2阶。 5. **回溯(Backtracking)**: -...
- Unique Paths / Unique Paths II: 前者计算从矩阵的左上角到右下角的路径数量;后者则考虑了障碍物。 - Minimum Path Sum: 在一个m×n的网格中,找到从左上角到右下角的路径,使得路径上的数字总和最小。 - Plus ...
* Unique Paths:给定一个矩形,返回从左上角到右下角的路径数量。这个题目需要使用动态规划的思想,将矩形分解成更小的子矩形,并统计路径数量。 * Maximum Subarray:给定一个数组,返回数组中的最大子数组和。这...
Unique Paths 这道题是一道动态规划的题,还算简单。状态转移方程为: path[i][j] = path[i-1][j] + path[i][j-1]; i和j表示的是i*j的网格从左上角到右下角的路径数量。 并且初始的时候path[i][j]都为1。 为方便起见...
62.unique-paths.cpp [TODO] 5. 最长回文子串.cpp 第 3 天: [TODO] 96.unique-binary-search-trees.cpp [TODO] 70. 爬楼梯.cpp [TODO] 746. min-cost-climbing-stairs.cpp 第 4 天: [待办事项] leetcode/1143。 ...
- "不同路径"(Unique Paths)和"不同路径 II"(Unique Paths II)同样是关于路径计算的动态规划问题。 **二分搜索(Binary Search)** 二分搜索算法适用于有序数组或列表的快速查找问题。 - "搜索插入位置"...