Leetcode(Java)-200. 島嶼數量

給定一個由 '1'(陸地)和 '0'(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。

示例 1:

輸入:
11110
11010
11000
00000

輸出: 1
示例 2:

輸入:
11000
11000
00100
00011

輸出: 3

思路:深度優先搜索

class Solution {
    int[] dx = {0,0,1,-1};
    int[] dy = {1,-1,0,0};
    public int numIslands(char[][] grid) {
        int res = 0;
        int r = grid.length;
        if(r==0)
            return 0;
        int c = grid[0].length;
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                if(grid[i][j] == '1')
                {
                    res++;
                    dfs(grid,i,j);
                }
            }
        }
        return res;
    }
    void dfs(char[][] grid,int x,int y)
    {
        int r = grid.length;
        int c = grid[0].length;
        if(grid[x][y]=='0') return;
        for(int i=0;i<4;i++)
        {
            if(x+dx[i]>=0 && x+dx[i]<r && y+dy[i]>=0 && y+dy[i]<c )
            {
                grid[x][y] = '0';
                dfs(grid,x+dx[i],y+dy[i]);
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章