Leetcode Number of Islands

题目地址:https://leetcode.com/problems/number-of-islands/

题目分析:

需要找出水平或者垂直相连的‘1’的个数,第一思路是递归遍历直到上下左右走没有‘1’返回,同时需要注意遍历到一个‘1’将其修改为‘0’表示已经访问过了;然后每遍历完一次即表示一个island,设置一个计数器记录遍历次数即可。

题目解答:

public class Solution {
    public int numIslands(char[][] grid) {
        if(grid == null || grid.length == 0 || grid[0].length == 0){
            return 0;
        }
        
        int cnt = 0;
        for(int i = 0;i< grid.length;i++){
            for(int j = 0;j<grid[0].length;j++){
                if(grid[i][j] == '1'){
                    dfs(grid,i,j,grid.length-1,grid[0].length - 1);
                    cnt++;
                }
            }
        }
        return cnt;
    }
    
    private void dfs(char[][] grid,int i,int j,int m,int n){
        if(i > m || i < 0 || j > n || j < 0 || grid[i][j] != '1')
            return;
        
        grid[i][j] = '0';
        
        dfs(grid,i,j+1,m,n);
        dfs(grid,i,j-1,m,n);
        dfs(grid,i+1,j,m,n);
        dfs(grid,i-1,j,m,n);
        
        return;
    }
}

 

posted @ 2015-04-09 09:34  buptubuntu  阅读(258)  评论(0)    收藏  举报