北京虛擬注冊(cè)地址新政中國(guó)seo公司
1254. 統(tǒng)計(jì)封閉島嶼的數(shù)目
這道題和 島嶼數(shù)量 – 二維矩陣的dfs算法 類似,區(qū)別在于不算邊緣部分的島嶼,那其實(shí)很簡(jiǎn)單,把上?題中那些靠邊的島嶼排除掉,剩下的就是「封閉島嶼」了。
關(guān)于島嶼的相似題目:
- 島嶼數(shù)量 – 二維矩陣的dfs算法
- 封閉島嶼數(shù)量 – 二維矩陣的dfs算法
- 統(tǒng)計(jì)封閉島嶼的數(shù)目
- 統(tǒng)計(jì)子島嶼
- 不同島嶼的數(shù)量
class closedIsland:"""floodFill 算法1254. 統(tǒng)計(jì)封閉島嶼的數(shù)目https://leetcode.cn/problems/number-of-closed-islands/"""def solution(self, grid: List[List[str]]) -> int:res = 0m, n = len(grid), len(grid[0])for j in range(n):# 先把靠上邊的島嶼淹掉self.dfs_matrix(grid, 0, j)# 先把靠下邊的島嶼淹掉self.dfs_matrix(grid, m-1, j)for i in range(m):# 先把靠左邊的島嶼淹掉self.dfs_matrix(grid, i, 0)# 先把靠右邊的島嶼淹掉self.dfs_matrix(grid, i, n-1)# 遍歷grid,就是所有的封閉島嶼for i in range(m):for j in range(n):if grid[i][j] == 0:res += 1self.dfs_matrix(grid, i, j)return resdef dfs_matrix(self, grid, i, j):m, n = len(grid), len(grid[0])# 跳出遞歸條件if i < 0 or i >= m or j < 0 or j >= n:returnif grid[i][j] == 1:returngrid[i][j] = 1self.dfs_matrix(grid, i - 1, j) # 上self.dfs_matrix(grid, i + 1, j) # 下self.dfs_matrix(grid, i, j - 1) # 左self.dfs_matrix(grid, i, j + 1) # 右