题解 | #岛屿数量#
岛屿数量
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)
#算法入门##深度优先#
查看14道真题和解析