ETH官方钱包

前往
大廳
主題

LeetCode - 1992. Find All Groups of Farmland 解題心得

Not In My Back Yard | 2022-02-17 00:00:05 | 巴幣 0 | 人氣 333

題目連結:


題目意譯:
你被給定一個索引值從 0 開始的 m × n 之二元矩陣 land,其中一個 0 代表著一公頃的森林地且一個 1 代表著公頃的農地。

為了使土地整齊劃一,土地被劃分成若干個矩形區域只由農地組成。這些矩形區域稱為群組。沒有兩個群組會相鄰,意味著同一個群組的農地皆不會四方向相鄰於另一個群組的農地。

土地可以用一個座標系統來表示,其中 land 的左上角為 (0, 0) 而右下角為 (m-1, n-1)。找到每個農地群組的左上角與右下角座標。一個有著左上角位於 (r1, c1)、右下角位於 (r2, c2) 的農地可以表為一個長度 4 的陣列 [r1, c1, r2, c2]。

回傳一個二維陣列包含著 land 中每個農地群組的長度 4 之陣列。如果不存在任何農地群組,則回傳一個空陣列。你可以任意順序回傳答案。

限制:
m == land.length
n == land[i].length
1 ≦ m 、 n ≦ 300
land 只由 0 和 1 組成。
農地群組之形狀為矩形。



範例測資:
範例 1:
輸入: land = [[1,0,0],[0,1,1],[0,1,1]]
輸出: [[0,0,0,0],[1,1,2,2]]
解釋:
第一個群組的左上角位於 land[0][0] 且右下角位於 land[0][0]。
第一個群組的左上角位於 land[1][1] 且右下角位於 land[2][2]。

範例 2:
輸入: land = [[1,1],[1,1]]
輸出: [[0,0,1,1]]
解釋:
第一個群組的左上角位於 land[0][0] 且右下角位於 land[1][1]。

範例 3:
輸入: land = [[0]]
輸出: []
解釋:
不存在任何農地群組。


解題思維:
我們從 land 這個矩陣的左上角開始從左至右、由上至下地搜尋,每當我們碰到農地時就做類似廣度優先搜尋(Breadth First Search,BFS,如這題)的動作把整塊農地群組標示為「已找過」以免之後重複搜尋。而因為群組的形狀是矩形,所以我們首先找到的會是這個群組的左上角,然後我們就從左上角往右找農地直到沒有為止、往下找農地直到沒有為止。此時便可以知道整塊農地的長寬以及右下角的位置。

把過程中所有農地群組的左上角、右下角座標按照題意存起來即是所求。




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

創作回應

追蹤 創作集

作者相關創作

更多創作