2026/5/28 20:06:13
网站建设
项目流程
php网站开发环境的设置,网站风格对比,儋州网站设计公司,东莞建筑建设网站建设题目#xff1a;思路#xff1a;逐个检查网格的每个坐标 (i,j)#xff1a;若当前位置是未访问的陆地#xff08;grid[i][j] 1#xff09;#xff0c;说明找到一个新岛屿 → 计数 ans 1立即启动 DFS#xff0c;把这个岛屿的所有连通陆地标记为 “已访问”#xff0c;避…题目思路逐个检查网格的每个坐标(i,j)若当前位置是未访问的陆地grid[i][j] 1说明找到一个新岛屿 → 计数ans 1立即启动 DFS把这个岛屿的所有连通陆地标记为 “已访问”避免后续重复计数。递归终止条件若当前坐标(i,j)满足以下任一条件直接返回行 / 列越界i 0 或 i m 或 j 0 或 j n不是未访问的陆地grid[i][j] ! 1可能是海洋 0 或已访问的陆地 2。标记已访问将当前陆地grid[i][j]改为非 1 的值如 2避免重复递归、无限循环。递归遍历四邻域依次向「上、下、左、右」四个方向递归调用 DFS直到整个岛屿的所有陆地都被标记。每完成一次 DFS递归遍历完一个岛屿的所有陆地就代表找到一个独立岛屿最终ans即为岛屿总数。代码class Solution: def numIslands(self, grid: List[List[str]]) - int: m,n len(grid),len(grid[0]) def dfs(i,j): if i0 or im or j0 or jn or grid[i][j]!1: return if grid[i][j] 1: #出界或者不是 1就不再往下递归 grid[i][j] 2 # 标记避免来回横跳无限递归 dfs(i,j1) dfs(i,j-1) dfs(i-1,j) dfs(i1,j) ans 0 for i,row in enumerate(grid): for j,col in enumerate(row): if col 1: # 找到了一个新的岛 dfs(i,j) # 把这个岛标记这样后面遍历到的 1 一定是新的岛 ans 1 return ans