每日一題 島嶼數量

2021-10-05 06:55:44 字數 1603 閱讀 5632

今天是2023年4月20日,星期一。

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

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

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

示例 1:

輸入:

11110

11010

11000

00000

輸出: 1

示例 2:

輸入:

11000

11000

00100

00011

輸出: 3

解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連線而成。

可以看出這個問題是乙個典型的bfs問題。在bfs問題中,我們通常借助佇列+標識陣列來完成廣度優先遍歷。推薦去看一下weiwei大佬的題解,出門右**島嶼數量。

在遍歷陣列的過程中,每次向其餘四個方向進行尋找,如果已經訪問過該元素,或者該元素不為』1』,則不處理;否則一定滿足該元素未被訪問過 && 該元素未'1',此時島嶼數量需要加1,並搜尋該元素的四周。

該題目還可以使用深度優先遍歷dfs來解決。在向乙個方向搜尋時,不斷搜尋,直到搜尋到某乙個元素的值不為』1』。在weiwei大佬的題解中有動態圖示來進行展示,這裡就不在贅述。

public int numislands(char grid) 

// 記錄是否某個元素已經訪問過了

boolean flag = new boolean[rows][cols];

// 記錄島嶼的個數

int count = 0;

int distancex = ;

int distancey = ;

for (int row = 0; row < rows; row++) );

while (!queue.isempty()) );}}

}}}}

return count;

}

/**

* 題目參考weiwei大佬的dfs完成

* * @param grid

* @return

*/public int numislands(char grid)

int cols = grid[0].length;

boolean flag = new boolean[rows][cols];

int count = 0;

for (int row = 0; row < rows; row++) }}

return count;

}private void dfs(int x, int y, boolean flag, int rows, int cols, char grid) ;

int distancey = ;

flag[x][y] = true;

for (int i = 0; i < 4; i++)

}}private boolean inarea(int x, int y, int rows, int cols)

每日一題 島嶼數量

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例1 輸入 11110 11010 11000 00000 輸出 1 示例2 輸入 11000 1...

每日一題打卡 200 島嶼的數量

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 我的解答 深度優先遍歷 c...

10 30 每日一題 463 島嶼的周長

給定乙個包含0和1的二維網格地圖,其中1表示陸地0表示水域。網格中的格仔水平和垂直方向相連 對角線方向不相連 整個網格被水完全包圍,但其中恰好有乙個島嶼 或者說,乙個或多個表示陸地的格仔相連組成的島嶼 島嶼中沒有 湖 湖 指水域在島嶼內部且不和島嶼周圍的水相連 格仔是邊長為1的正方形。網格為長方形,...