417. 太平洋大西洋水流问题

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。

规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。

请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。

提示:

输出坐标的顺序不重要

m 和 n 都小于150

示例:

给定下面的 5x5 矩阵:

  太平洋 ~   ~   ~   ~   ~
~ 1 2 2 3 (5) *
~ 3 2 3 (4) (4) *
~ 2 4 (5) 3 1 *
~ (6) (7) 1 4 5 *
~ (5) 1 1 2 4 *
* * * * * 大西洋

返回:

[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (上图中带括号的单元).

class Solution {
private int row, col;
private int[][] grid;
private List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> pacificAtlantic(int[][] matrix) {
row = matrix.length;
if (row == 0) {
return result;
}
col = matrix[0].length;
grid = new int[row][col];
for (int i = 0; i < row; i++) {
helper(matrix, i, 0, 1);
}
for (int j = 0; j < col; j++) {
helper(matrix, 0, j, 1);
}
for (int i = 0; i < row; i++) {
helper(matrix, i, col - 1, 2);
}
for (int j = 0; j < col; j++) {
helper(matrix, row - 1, j, 2);
}
return result;
} private void helper(int[][] matrix, int i, int j, int v) {
if (grid[i][j] == v || grid[i][j] == 3) {
return;
}
grid[i][j] += v;
if (grid[i][j] == 3) {
List<Integer> temp = new ArrayList<>();
temp.add(i);
temp.add(j);
result.add(temp);
}
if (i != 0 && matrix[i - 1][j] >= matrix[i][j]) {
helper(matrix, i - 1, j, v);
}
if (j != 0 && matrix[i][j - 1] >= matrix[i][j]) {
helper(matrix, i, j - 1, v);
}
if (i != row - 1 && matrix[i + 1][j] >= matrix[i][j]) {
helper(matrix, i + 1, j, v);
}
if (j != col - 1 && matrix[i][j + 1] >= matrix[i][j]) {
helper(matrix, i, j + 1, v);
}
} }

最新文章

  1. 聊聊 C 语言中的 sizeof 运算
  2. 关于DOM的一些笔记(二)
  3. C#中常用的读取xml的几种方法(转)
  4. Linux文件目录权限总结
  5. jq实现 按钮点击一次后 3秒后在可点击
  6. [锋利的JQ]-超链接提示效果
  7. 16.迭代器模式(Iterator Pattern)
  8. 【C++】动态内存与智能指针
  9. window7快捷键
  10. 内核映像的形成 —— KBuild体系
  11. java内存被释放的小例子
  12. 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
  13. Linux 下按时间顺序批量删除文件
  14. java核心卷笔记--P48字符串3.6.5
  15. 第二天(就业班) html的引入、html常用标签、实体标签、超链接标签、图片标签、表格、框架标签、表单[申明:来源于网络]
  16. Mysql数据字典导出
  17. 18Linux-LNMP-Linux就该这么学
  18. Confluence 6 MBeans
  19. MSMQ 跨服务器读写队列的“消息队列系统的访问被拒绝”的解决方案
  20. Oracle 存储过程或函数传入的数值参数number

热门文章

  1. 数据结构之栈(stack)的实现
  2. 爬虫系列 一次采集.NET WebForm网站的坎坷历程
  3. pthon-安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示“This application failed to start because no Qt platform plugin could be initialized.Reinstalling the application the application may fix this program”
  4. 初识spring boot maven管理--属性文件配置
  5. 编写HTML和CSS几点心得
  6. 黑马程序员_毕向东_Java基础视频教程——转义字符(随笔)
  7. HTML标签和属性二
  8. 用了这么多年MySql,这些好习惯你用过哪些
  9. 教你避过安装TensorFlow的两个坑
  10. 如何分析和提高(C/C++)程序的编译速度?