給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通(上、下、左、右四個方向)的 1 組成,你可以認為網格的四周被海水包圍。
請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換(不可以旋轉、翻轉)和另乙個島嶼重合。
示例 :
11011
10000
00001
11011
給定上圖,返回結果 3 。
注意:111和
111是不同的島嶼,因為我們不考慮旋轉、翻轉操作。
1.dfs搜尋到所有島嶼,並且儲存其profile,然後sort排序unique去重,即為不同島嶼數量
class
solution
;int dy[4]
=;intnumdistinctislands
(vectorint>>
& grid)}}
sort
(profiles.
begin()
,profiles.
end())
;return
unique
(profiles.
begin()
,profiles.
end())
-profiles.
begin()
;}void
dfs(vectorint>>
& grid,
int x,
int y,
int i,
int j,vectorint,
int>>
& profile));
for(
int k=
0;k<
4;k++)}
};
2.set
class
solution
;int dy[4]
=;intnumdistinctislands
(vectorint>>
& grid)}}
//sort(profiles.begin(),profiles.end());
return profiles.
size()
;}void
dfs(vectorint>>
& grid,
int x,
int y,
int i,
int j,vectorint,
int>>
& profile));
for(
int k=
0;k<
4;k++)}
};
694 不同島嶼的數量
題目描述 給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通 上 下 左 右四個方向 的 1 組成,你可以認為網格的四周被海水包圍。請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換 不可以旋轉 翻轉 和另乙個島嶼重合。示例 1 11000 1...
島嶼的數量(思維)
題目 有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高...
島嶼的數量 (思維)
有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高度為 ...