1905. 統計子島嶼()
阿新 • • 發佈:2022-05-30
labuladong 題解思路
難度中等給你兩個 m x n
的二進位制矩陣 grid1
和 grid2
,它們只包含 0
(表示水域)和 1
(表示陸地)。一個 島嶼 是由 四個方向 (水平或者豎直)上相鄰的 1
組成的區域。任何矩陣以外的區域都視為水域。
如果 grid2
的一個島嶼,被 grid1
的一個島嶼 完全 包含,也就是說 grid2
中該島嶼的每一個格子都被 grid1
中同一個島嶼完全包含,那麼我們稱 grid2
中的這個島嶼為 子島嶼 。
請你返回 grid2
中 子島嶼 的 數目 。
示例 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 。 grid2 中標紅的 1 區域是子島嶼,總共有 3 個子島嶼。
示例 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 。 grid2 中標紅的 1 區域是子島嶼,總共有 2 個子島嶼。
提示:
m == grid1.length == grid2.length
n == grid1[i].length == grid2[i].length
1 <= m, n <= 500
-
grid1[i][j]
grid2[i][j]
都要麼是0
要麼是1
。
class Solution { public: vector<vector<int>> dirs = {{1,0},{-1,0},{0,1},{0,-1}}; void dfs(int i, int j, vector<vector<int>>& grid) { if( i<0 || i>=grid.size() || j<0 || j >= grid[0].size()) { return; }if (grid[i][j] == 0) { return; } grid[i][j] = 0; for(auto ch : dirs) { dfs(i+ch[0],j+ch[1],grid); } } int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) { //淹掉不是子島的方塊 for(int i = 0; i < grid1.size();i++) { for(int j = 0; j < grid1[0].size();j++) { if (grid1[i][j] == 0 && grid2[i][j]==1) { dfs(i,j,grid2); } } } //統計數量 int res = 0; for(int i = 0; i < grid1.size();i++) { for(int j = 0; j < grid1[0].size();j++) { if (grid2[i][j]==1) { dfs(i,j,grid2); res++; } } } return res; } };