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

  • 题目
  • 解题思路
  • 代码

题目

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

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

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

提示:

  • 输出坐标的顺序不重要
  • m 和 n 都小于150

解题思路

这题和130题有点类似,都是从边界往内寻找。

这题呢我们从边界出发,假设先从上边出发,也就是太平洋。 靠近上边的水流一定都可以流入太平洋,那么我们只需要将“上边”遍历,找到高度比它高的,就可以通过它流入太平洋。其它三条边也是这样。只不过右边和下边是可以流入大西洋。

解释一下:题目说高度高的可以向高度低的或者高度相等的流动。 也就是说,只要比上边的水流的高度高,或者相等,那么该水流就可以流到上边,而上边又和太平洋相连,即该水流可流入太平洋。

这样,两轮循环,一轮用来找到可以流入太平洋的水流, 一轮找到可以流入大西洋的水流,把它们分别放入两个boolean数组中,然后再来一次整个数组遍历,如果有一个水流 即可流入太平洋也可流入大西洋(toPa[i][j] && toAt[i][j])。那么它就是我们要寻找的。把它的坐标放入res,返回即可。

本题的重点就是 中间的水流可以通过四条边的水流 流入对应的海洋。

代码

class Solution {public List<List<Integer>> pacificAtlantic(int[][] matrix) {List<List<Integer>> res = new ArrayList<>();if (matrix.length == 0 || matrix[0].length == 0) {return res;}int r = matrix.length;//行数,可以看成y轴int c = matrix[0].length;//列数,可以看成x轴boolean[][] toPa = new boolean[r][c];boolean[][] toAt = new boolean[r][c];for (int i = 0; i < r; i++) {//要去选择第一列和最后一列,  变化的是行数,列数是固定的0和c-1,所以这里循环条件用行(r)//第一次遍历,会给一个初始高度,到后面要进行比较的时候再用matrix[r][c] 来替换初始高度DFS(i, 0, matrix, toPa, Integer.MIN_VALUE);//遍历第一列  即正方形的左边,它用DFS来遍历哪些能够通过它 ,到达太平洋(Pa)的水流。下面的同理DFS(i, c - 1, matrix, toAt, Integer.MIN_VALUE);//遍历最后一列}for (int i = 0; i < c; i++) {DFS(0, i, matrix, toPa, Integer.MIN_VALUE);//遍历第一行DFS(r - 1, i, matrix, toAt, Integer.MIN_VALUE);//遍历最后一行}for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {//遍历整个二维数组if (toPa[i][j] && toAt[i][j]) {//如果该水流即能到达pa也能到达at,就是我们的目标List<Integer> cur = new ArrayList<>();cur.add(i);cur.add(j);res.add(cur);}}}return res;}int[][] directions = new int[][]{{0, 1}, {0, -1}, {-1, 0}, {1, 0}};public void DFS(int r, int c, int[][] matrix, boolean[][] toSea, int height) {if (r < 0 || r >= matrix.length|| c < 0 || c >= matrix[0].length|| toSea[r][c]|| matrix[r][c] < height) {//matrix[r][c] < height即现在遍历到的水流高度,比之前那个要小,这是不可以的,因为只有现在的高度大于之前的高度,才可以通过之前的流入海洋return;}toSea[r][c] = true;//它能够到达大西洋或者太平洋。要根据具体是那个在那个循环调用的。for (int[] dir : directions) {/*r + dir[0]:相当于横坐标向四个方向遍历c + dir[1]:相当于纵坐标向四个方向遍历*/DFS(r + dir[0], c + dir[1], matrix, toSea, matrix[r][c]);//这时候高度就会更新为matrix[r][c]}}
}

417. 太平洋大西洋水流问题(DFS)相关推荐

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

    LeetCode 417.太平洋大西洋水流问题 有一个 m × n 的长方形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋&qu ...

  2. 417. 太平洋大西洋水流问题(medium) -力扣(leetCode)逆流而上,JS图的深度优先遍历算法

    ⚡️417. 太平洋大西洋水流问题⚡️ 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处 ...

  3. 力扣417 太平洋大西洋水流问题

    417. 太平洋大西洋水流问题 - 力扣(LeetCode) 核心: 建立两个和给定矩阵宽高一致的矩阵,分别表示太平洋和大西洋 从边界出发,深度优先遍历矩阵,继续递归前进行条件的限制:结点没有超出界限 ...

  4. Java实现 LeetCode 417 太平洋大西洋水流问题

    417. 太平洋大西洋水流问题 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的 ...

  5. LeetCode 417. 太平洋大西洋水流问题--BFS

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

  6. LeetCode 417. 太平洋大西洋水流问题(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 广度优先搜索 2.2 DFS 深度优先搜索 1. 题目 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度. "太平洋&q ...

  7. LeetCode 417. 太平洋大西洋水流问题【dfs】

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

  8. LeetCode 417. 太平洋大西洋水流问题 JAVA dfs

    给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的右边界和下边界. 规定水流只能按 ...

  9. [LeetCode 中等 DFS]417. 太平洋大西洋水流问题

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

最新文章

  1. AI-2048 注释
  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
  3. JS三教九流系列-require.js-网站模块化开发
  4. 蓝桥杯 - 试题 H: 扫雷(思维)
  5. 程序员如何与人打交道
  6. C# DateTime.Compare判断两个DateTime 日期是否相等
  7. OpenWRT开发之——对C++的支持(解决库依赖问题)
  8. java 判断 and_Java中如何判断两个对象是否相等(Java equals and ==)
  9. 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试用python一键破解!
  10. sobel边缘检测java_Sobel边缘检测
  11. oracle11g dbf恢复数据库,dbf文件如何恢复数据库
  12. 团队作业1 团队展示选题
  13. ubuntu安装fcitx五笔拼音输入法_Simplelife_新浪博客
  14. uni-app 表单验证
  15. accumulate 的用法
  16. C语言输入三个数字判断大小
  17. afterlogic 7.0.1 php,免费webmail 7.0.1(after logic 最后一个免费版本)
  18. 项目07城市餐饮店铺选址分析
  19. 多线程加速图像模板匹配
  20. 程序员赚钱指南,良心推荐

热门文章

  1. Henry前端笔记之 HTML相关
  2. 2021年4月9日京东 2019校园招聘 Java开发工程师
  3. 孙正义:未来30年的人工智能和物联网
  4. 基于SPM12对fMRI数据进行预处理及其批处理
  5. 漂白android软件,原本图片漂白软件(图片漂白处理工具)V1.1 最新版
  6. 「电子鼻」鉴别威士忌准确率高达96%,网友:给茅台也整一个
  7. 电视机防近视预警系统c语言,预防近视、提升视力 TCL儿童电视亮相重庆
  8. FHE学习笔记 #1 部分抽象代数名词
  9. 首批红米Note9Pro陆续到货,网友分享感受:一条差评让人哭笑不得
  10. 七问七答 买到假戴森吹风机我该怎么办?