Leetcode in Java 200. Number of

2019-02-17  本文已影响0人  刺破羽毛

class Solution {

    private int m;

    private int n;

    public int numIslands(char[][] grid) {

        int res = 0;

        m = grid.length;

        if(m == 0)

            return 0;

        n = grid[0].length;

        for(int i = 0;i < m;i++){

            for(int j = 0;j < n;j++){

                if(grid[i][j] == '1'){//找到 i,j 为1的时候就算一个岛

                    dfs(grid,i,j);//进行一个深度优先遍历,最后会把属于这个点的一个“岛”遍历完毕

                    res++;//深度遍历一个岛,result就+1,所有的位置都变成0时,result也就有了最后的结果

                }

            }//两个 for 循环用来遍历已有的矩阵

        }

        return res;

    }

    private void dfs(char[][] grid,int i,int j){

        if(i<0||j<0||i>=m||j>=n||grid[i][j] == '0')

            return;//如果是上边和左边就超越了边界条件,直接 return

        grid[i][j] ='0';//找过的地方变成 0

        dfs(grid,i,j+1);

        dfs(grid,i,j-1);

        dfs(grid,i+1,j);

        dfs(grid,i-1,j);//上下左右四个方向的遍历

    }//找过的地方都会变成 0,证明几个1是连在一起的,是一个“岛”

}

上一篇下一篇

猜你喜欢

热点阅读