題目描述:
給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通(上、下、左、右四個方向)的 1 組成,你可以認為網格的四周被海水包圍。
請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換(不可以旋轉、翻轉)和另乙個島嶼重合。
示例 1:
11000
11000
00011
00011
給定上圖,返回結果 1 。
示例 2:
11011
10000
00001
11011
給定上圖,返回結果 3 。
注意:111
和111是不同的島嶼,因為我們不考慮旋轉、翻轉操作。
二維陣列每維的大小都不會超過 50 。
方法1:
主要思路:
(1)遍歷陣列,找出每個島嶼左上角的第乙個位置,從該位置開始進行廣度優先搜尋,並將搜尋過的位置標記,同時將搜尋到的座標都減去第乙個左上角的位置的座標(相當於將整個島嶼以左上角為基準平移到0,0的位置);
(2)將平移後的島嶼的座標都儲存到set中,用於去重相同的島嶼的形狀,最後返回的set的大小,即為島嶼的種類;
class
solution
if(x+
1size()
&&grid[x+1]
[y]==1)
if(y-
1>=
0&&grid[x]
[y-1]==
1)if(y+
1.size()
&&grid[x]
[y+1]==
1)}//將當前島嶼插入set中,相同的島嶼會自動去重
st.insert
(tmp);}
}}//返回set的大小
return st.
size()
;}};
694不同島嶼的數量
給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通 上 下 左 右四個方向 的 1 組成,你可以認為網格的四周被海水包圍。請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換 不可以旋轉 翻轉 和另乙個島嶼重合。示例 11011 10000 00...
島嶼的數量(思維)
題目 有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高...
島嶼的數量 (思維)
有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高度為 ...