题解 | #岛屿数量#

岛屿数量

http://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

遍历矩阵的每个元素,如果是1那么就给岛屿数量加上1,同时用dfs或bfs去遍历该岛屿的所有邻接岛屿(其实就是遍历这个点的连通图),将所有邻接岛屿都重新标记为0,然后继续往下遍历就行。其实这个题就是在找矩阵中的连通图数量。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 判断岛屿数量
# @param grid char字符型二维数组 
# @return int整型
#
class Solution:
    def solve(self , grid) -> int:
        # write code here
        if len(grid) == 0:
            return 0
        self.num = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if str(grid[i][j])=='0':
                    pass
                else:
                    self.num+=1
                    self.dfs(grid,i,j)
        return self.num

    def dfs(self , grid , i , j):
        grid[i][j]='0'
        if i < len(grid)-1: # 往右看
            if str(grid[i+1][j]) == '1':
                self.dfs(grid,i+1,j)
            else:
                pass
        if j < len(grid[0])-1: # 往下看
            if str(grid[i][j+1]) == '1':
                self.dfs(grid,i,j+1)
            else:
                pass
        if i > 0: # 往左
            if str(grid[i-1][j]) == '1':
                self.dfs(grid,i-1,j)
            else:
                pass
        if j > 0: # 往上
            if str(grid[i][j-1]) == '1':
                self.dfs(grid,i,j-1)


grid = [
[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,1,1,1]
]

print(Solution().solve(grid))
全部评论

相关推荐

码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 17:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务