题解 | #岛屿数量#

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

这种方法总体来说就是遍历各个格子,遇到陆地就遍历整块大陆,边遍历边标记,后续不再重复遍历。
这种方法贴近人类思想,便于理解,但是很慢。

import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public void dfs(int i, int j, char[][] grid, int[][] searched){
        int m = grid.length, n = grid[0].length;
        Deque<Integer[]> deque = new LinkedList();
        deque.addLast(new Integer[]{i,j});
        searched[i][j] = 1;
        while(!deque.isEmpty()){
            Integer[] temp = deque.removeFirst();
            int p = temp[0];
            int q = temp[1];
            if(p+1<m && searched[p+1][q]==0 && grid[p+1][q]=='1'){
                deque.addLast(new Integer[]{p+1,q}); 
                searched[p+1][q] = 1;
            } 
            if(p-1>=0 && searched[p-1][q]==0 && grid[p-1][q]=='1'){
                deque.addLast(new Integer[]{p-1,q});
                searched[p-1][q] = 1;
            } 
            if(q+1<n && searched[p][q+1]==0 && grid[p][q+1]=='1'){
                deque.addLast(new Integer[]{p,q+1});
                searched[p][q+1] = 1;
            } 
            if(q-1>=0 && searched[p][q-1]==0 && grid[p][q-1]=='1'){
                deque.addLast(new Integer[]{p,q-1});
                searched[p][q-1] = 1;
            } 
        }
    }
    public int solve (char[][] grid) {
        // write code here
        int count = 0, m = grid.length, n = grid[0].length;
        
        int[][] searched = new int[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]=='1' && searched[i][j]==0){
                    count += 1;
                    dfs(i, j, grid, searched);
                }
            }
        }
        return count;
    }
}


全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务