200. 岛屿数量

题目

链接(https://leetcode-cn.com/problems/number-of-islands/)
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000

输出: 1
示例 2:

输入:
11000
11000
00100
00011

输出: 3

分析

这道题目相对简单
首先遍历这个二维数组,遇到1 ,就计数加一,然后把这个坐标添加到stack里面。
取stack顶部,遍历。遍历的方法是上下左右一直遍历。
如上遍历:i--,遇到1就把1改成0,然后添加到tack中只到遇到0或者超出边界

代码

class Solution {
    public int numIslands(char[][] grid) {
        //岛屿计数
        int account = 0;
        //还未遍历的点
            Stack stack = new Stack<>();
            for (int i = 0; i < grid.length; i++) {
                for (int j = 0; j < grid[i].length; j++) {
                    if (grid[i][j]=='1'){
                        //遇到岛屿 计数加一
                        account++;
                        int [] temp = {i,j};
                        //然后入栈
                        stack.push(temp);
                        while (!stack.empty()){
                            //取出未遍历的点
                            int[] top = stack.pop();
                            //遍历上下左右四个方向
                            turnRight(grid,top[0],top[1],stack);
                            turnLeft(grid,top[0],top[1],stack);
                            turnUp(grid,top[0],top[1],stack);
                            turnDown(grid,top[0],top[1],stack);
                        }
                    }
                }
            }
            return account;
    }
    //left遍历,一直向lefg遍历,直到遇到0或者超出边界。遇到1则把1变成0,然后把这个点放入为遍历的stack
    private  void turnLeft(char[][] grid, int i, int j, Stack stack) {
            while ((j+1 stack) {
            while ((j-1>=0) && grid[i][j-1]=='1'){
                j--;
                grid[i][j]='0';
                int[] temp = {i,j};
                stack.push(temp);
            }
        }
        private  void turnUp(char[][] grid, int i, int j, Stack stack) {
            while ((i-1>=0) && grid[i-1][j]=='1'){
                i--;
                grid[i][j]='0';
                int[] temp = {i,j};
                stack.push(temp);
            }
        }

        private  void turnDown(char[][] grid, int i, int j, Stack stack) {
            while ((i+1

结果

200. 岛屿数量_第1张图片
image.png

你可能感兴趣的:(200. 岛屿数量)