题解 | #岛屿数量#

岛屿数量

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)

#算法入门##深度优先#
全部评论

相关推荐

不愿透露姓名的神秘牛友
10-30 10:32
美团 后端开发 23k 双非本,985硕
程序员小白条:薪资请匿名,要么过一段时间发
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务