LeetCode:島嶼數量(隊列與BFS)

島嶼數量

題目:

給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連接形成。

此外,你可以假設該網格的四條邊均被水包圍。

示例1:

輸入:
11110
11010
11000
00000
輸出: 1

示例2:

輸入:
11000
11000
00100
00011
輸出: 3
解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連接而成。

解題思路:

我們遍歷整個二維數組,當我們遇到爲’1’的,我們將其相鄰的所有‘1’重置爲‘0’,即將這一塊島全部都變爲海水然後再去遍歷數組剩下的部分。遇到一個島嶼的第一標‘1’的cnt加1。

代碼實現:

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

原文傳送門:
https://www.jianshu.com/p/d5eb363b01d5

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