417. Pacific Atlantic Water Flow

来源:互联网 发布:支持php的web服务器 编辑:程序博客网 时间:2024/05/01 08:00

这道题起初我的思路,是深度搜索每一个点,由高往低,看最终是否到达边界,我现在的解参考了标准答案,思路是一样的,当代码也有很多不同,就是从边界开始深搜,用两个数组分别保存能连接p大洋和a大洋的点,如果这个点在这两个数组,这就是我们要找的点。

public class Solution {    public List<int[]> pacificAtlantic(int[][] matrix) {        List<int[]> list = new ArrayList<>();        int len = matrix.length;        if(len<=0)return list;        int width = matrix[0].length;        boolean[][] pacific = new boolean[len][width];        boolean[][] Atlantic = new boolean[len][width];        for (int j = 0; j < width; j++) {            dfs(matrix, 0, j, pacific);            dfs(matrix,len-1,j,Atlantic);        }        for (int j=0;j<len;j++){            dfs(matrix,j,0,pacific);            dfs(matrix,j,width-1,Atlantic);        }        for (int i=0;i<len;i++)            for (int j=0;j<width;j++){                if (pacific[i][j]&&Atlantic[i][j]){                    list.add(new int[]{i,j});                }            }        return list;    }    private void dfs(int[][] matrix, int y, int x, boolean[][] visited) {        visited[y][x] = true;        int[] dx = {1, -1, 0, 0};        int[] dy = {0, 0, 1, -1};        for (int i = 0; i < 4; i++) {            int xx = x + dx[i];            int yy = y + dy[i];            if (xx >= 0 && xx < matrix[0].length && yy >= 0 && yy < matrix.length && matrix[yy][xx] >= matrix[y][x] && !visited[yy][xx]) {                dfs(matrix, yy, xx, visited);            }        }    }}
0 0
原创粉丝点击