前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >floodfill算法系列一>太平洋大西洋水流问题

floodfill算法系列一>太平洋大西洋水流问题

作者头像
用户11305962
发布2025-02-16 19:56:46
发布2025-02-16 19:56:46
3500
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

题目方法解析:

这里是引用
这里是引用

代码设计:

这里是引用
这里是引用

代码呈现:

代码语言:javascript
代码运行次数:0
复制
class Solution {
    int m,n;
    int[] dx = {0,0,-1,1};
    int[] dy = {-1,1,0,0};

    public List<List<Integer>> pacificAtlantic(int[][] heights) {
        m = heights.length; n = heights[0].length;
        boolean[][] pac = new boolean[m][n];
        boolean[][] atl = new boolean[m][n];

        //判断大西洋的水能否流到某一位置
        for(int i = 0; i < n; i++) dfs(heights,0,i,pac);
        for(int j = 0; j < m; j++) dfs(heights,j,0,pac);

        //判断太平洋的水能否流到某一位置
        for(int i = 0; i < m; i++) dfs(heights,i,n-1,atl);
        for(int j = 0; j < n; j++) dfs(heights,m-1,j,atl);

        List<List<Integer>> ret = new ArrayList<>();
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                if(pac[i][j] && atl[i][j]){
                    List<Integer> tmp = new ArrayList<>();
                    tmp.add(i); tmp.add(j);
                    ret.add(tmp);
                }
            }

        return ret;
    }

    //封装出来一套标记遍历
    private void dfs(int[][] heights, int i, int j, boolean[][] vis){

        vis[i][j] = true;
        for(int k = 0; k < 4; k++){
            int x = i + dx[k]; int y = j + dy[k];
            if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && heights[x][y] >= heights[i][j]){
                dfs(heights,x,y,vis);
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目方法解析:
  • 代码设计:
  • 代码呈现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档