当前位置: 首页 > 后端技术 > Python

LeetCode417.PacificAtlanticWaterFlow

时间:2023-03-25 19:48:44 Python

描述给定一个mxn的非负整数矩阵,表示一个大陆中每个单元格的高度,“太平洋”触及矩阵的左边缘和上边缘,“大西洋”触及矩阵的左边缘和上边缘接触右边缘和底部边缘。水只能沿四个方向(上、下、左或右)从一个单元格流到高度等于或低于另一个单元格。找到水可以流向太平洋的网格坐标列表和大西洋。注意:返回的网格坐标的顺序无关紧要。m和n均小于150。示例:给定以下5x5矩阵:Pacific~~~~~1223(5)*~323(4)(4)*~24(5)31*~(6)(7)145*~(5)1124******AtlanticReturn:[[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]](上述矩阵中带括号的位置)。描述给定一个米xn非负整数矩阵,表示大陆上每个像元的高度。“太平洋”在大陆的左上边界,“大西洋”在大陆的右下边界。规定水流只能向上、下、左、右四个方向流动,只能由高向低或同一高度流动。找到水同时流入“太平洋”和“大西洋”的那些陆地像元的坐标。提示:输出坐标的顺序并不重要m和n均小于150示例:给定以下5x5矩阵:Pacific~~~~~1223(5)*~323(4)(4)*~24(5)31*~(6)(7)145*~(5)1124******大西洋返回:[[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]](上图中带括号的单位)。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归灵口网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路是使用深度优先搜索(也可以使用广度优先搜索)。声明两个变量,pacific和atlantic,pacific表示从第一列第一行开始遍历点,以及遍历后所有点的状态,True表示可达,False表示不可达;atlantic表示从最后一行、最后一列Departure开始,所有可以到达的点;取这两部分的交集,就是答案。从每个点开始时,使用深度优先搜索。如果当前位置没有越界,没有遍历,并且上一个点的高度小于等于当前节点的高度,则表示可以到达当前节点。那么当前节点向四个方向前进:上、下、左、右。#-*-coding:utf-8-*-#@Author:何睿#@CreateDate:2019-11-0210:57:28#@LastModifiedby:何睿#@LastModifiedtime:2019-11-0212:02:14从键入importListclass解决方案:defpacificAtlantic(self,matrix:List[List[int]])->List[List[int]]:如果不是矩阵:返回行,col=len(matrix),len(matrix[0])pacific=[[False]*colfor_inrange(row)]atlantic=[[False]*colfor_inrange(row)]foriinrange(row):self.dfs(矩阵,i,0,-1,行,col,太平洋)self.dfs(矩阵,i,col-1,-1,row,col,atlantic)foriinrange(col):self.dfs(矩阵,0,i,-1,行,col,太平洋)self.dfs(矩阵,行-1,i,-1,行,col,大西洋)返回过滤器(lambdax:太平洋[x[0]][x[1]]andatlantic[x[0]][x[1]],((i,j)foriinrange(row)forjinrange(col)))defdfs(self,matrix,i,j,height,row,col,reached):如果not0<=i