DFS古典的な再帰の問題 - 0315から2020-LEETCODE-695-島の最大面積

私は書き込み、彼らはDFSの再帰とシェン島(グリッド[I] [J] =後に追加思わなかった、ループスルーしたくありませんでした 0) のアイデア。
コード出典ます。https://leetcode-cn.com/problems/max-area-of-island/solution/biao-zhun-javadong-tai-gui-hua-jie-fa-100-by-mark-/

public int maxAreaOfIsland(int[][] grid){
        int res = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                if (grid[i][j] == 1){
                    res = Math.max(res,dfs(i,j,grid));
                }
            }
        }
        return res;
    }

    private int dfs(int i, int j, int[][] grid) {
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[i].length || grid[i][j] == 0){
            return 0;
        }
        //沉岛思想,当前的grid[i][j]=1,证明当前方向要加的area >= 1,所以直接num最少是1,之后沉岛
        //确保以后的循环遍历不会再遍历到这个点。
        grid[i][j] = 0;
        int nums = 1;
        nums += dfs(i - 1,j,grid);
        nums += dfs(i + 1,j,grid);
        nums += dfs(i,j + 1,grid);
        nums += dfs(i,j - 1,grid);
        return nums;
    }
公開された98元の記事 ウォンの賞賛0 ビュー2196

おすすめ

転載: blog.csdn.net/weixin_43221993/article/details/104892072