题解 | #岛屿数量#
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 判断岛屿数量 # @param grid char字符型二维数组 # @return int整型 # # 思路:遍历二维列表,如果遇到'1'就进行dfs,将所有连着的'1'全部改为'0',意味着找到了一个岛屿,然后接着进行遍历,直到遍历完为止,单独一个'1'也算一个岛屿(如果是单独的'1'不算岛屿的话,需要加上一个bool变量来确定是否有相邻的'1')。 class Solution: # 一个类下的不同函数要用self.来调用,同时self.设置的变量在整个类中都能用 def solve(self , grid: List[List[str]]) -> int: # 注意给出的列表是字符串列表不是int列表,条件判断时要用字符! self.row = len(grid) # 二维列表的行数 self.column = len(grid[0]) # 二维列表的列数 count = 0 # 计数 # 按行遍历 for i in range(self.row): for j in range(self.column): # 若遇到字符'1',就进行dfs遍历并将其变为'0' if grid[i][j] == '1': count += 1 self.dfs(grid, i, j) return count def dfs(self, grid, m, n): # 先将最开始的'1'改为'0' grid[m][n] = '0' # 如果有相邻的'1'就递归调用dfs 递归停止的条件为无法再移动 # 如果能往上走且上方为'1' if m - 1 >= 0 and grid[m-1][n] == '1': self.dfs(grid, m-1, n) # 如果能往下走且下方为'1' if m + 1 <= self.row - 1 and grid[m+1][n] == '1': self.dfs(grid, m+1, n) # 如果能往左走且左方为'1' if n - 1 >= 0 and grid[m][n-1] == '1': self.dfs(grid, m, n-1) # 如果能往右走且右方为'1' if n + 1 <= self.column - 1 and grid[m][n+1] == '1': self.dfs(grid, m, n+1)#算法入门##深度优先#