[Lintcode]Number of Islands

来源:互联网 发布:暴雪铁人五项 知乎 编辑:程序博客网 时间:2024/06/10 17:43

Given a boolean 2D matrix, find the number of islands.


Example

Given graph:

[  [1, 1, 0, 0, 0],  [0, 1, 0, 0, 1],  [0, 0, 0, 1, 1],  [0, 0, 0, 0, 0],  [0, 0, 0, 0, 1]]

return 3.


遍历所有元素,遇到一个true时,改成false,并且对其相邻的值同样改为false


public class Solution {    /**     * @param grid a boolean 2D matrix     * @return an integer     */    public int numIslands(boolean[][] grid) {        int res = 0;        if(grid.length == 0) return 0;        if(grid[0].length == 0) return 0;        for(int i = 0; i < grid.length; i++) {            for(int j = 0; j < grid[0].length; j++) {                if(isIsland(grid, i, j)) res ++;            }        }        return res;    }        private boolean isIsland(boolean[][] grid, int i, int j) {        if(i >= grid.length || i < 0) return false;        if(j >= grid[0].length || j < 0) return false;        if(grid[i][j]) {            grid[i][j] = false;            isIsland(grid, i - 1, j);            isIsland(grid, i + 1, j);            isIsland(grid, i, j - 1);            isIsland(grid, i, j + 1);            return true;        }        else return false;    }}


0 0