前往
大廳
主題

LeetCode - 1905. Count Sub Islands 解題心得

Not In My Back Yard | 2021-10-02 00:00:03 | 巴幣 100 | 人氣 193

題目連結:


題目意譯:
你被給定兩個 m × n 二元矩陣 grid1 和 grid2 其只包含 0(代表水)和 1(代表陸地)。一個島嶼為一群的 1 彼此之間相鄰於四周(水平與垂直)。任一於網格外的格子視為水格子。

一個於 grid2 的島嶼視為子島嶼如果 grid1 存在一島嶼其包含著該 grid2 中的島嶼的所有格子。

回傳 grid2 中被視為子島嶼的島嶼數。

限制:
m == grid1.length == grid2.length
n == grid1[i].length == grid2[i].length
1 ≦ m 、 n ≦ 500
grid1[i][j] 和 grid2[i][j] 只會是 0 或是 1 。



範例測資:
範例 1:
輸入: grid1 = [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]], grid2 = [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]]
輸出: 3
解釋: 在上圖中,左側網格為 grid1 而右側為 grid2。
1 塗以紅色於 grid2 中代表著被視為一個子島嶼之一部分。而該圖有三個子島嶼。

範例 2:
輸入: grid1 = [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]], grid2 = [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]]
輸出: 2
解釋: 在上圖中,左側網格為 grid1 而右側為 grid2。
1 塗以紅色於 grid2 中代表著被視為一個子島嶼之一部分。而該圖有兩個子島嶼。


解題思維:
用廣度優先搜尋(Breadth First Search,BFS)的想法於 grid2 中找到每座島嶼(如這題),然後對每座島嶼去檢查其每個格子是否在 grid1 的相對應位置有著陸地。如果有島嶼的所有格子之對應位置都有著陸地,則該島嶼即為一個子島嶼。因此全部島嶼判斷完後便可以得到所求的子島嶼數量。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作