LintCode Python 简单级题目 433.岛屿的个数

Posted 刘冬丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode Python 简单级题目 433.岛屿的个数相关的知识,希望对你有一定的参考价值。

题目描述:

给一个01矩阵,求不同的岛屿的个数。

0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

样例

在矩阵:

[
  [1, 1, 0, 0, 0],
  [0, 1, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 0, 0],
  [0, 0, 0, 0, 1]
]

中有 3 个岛.

题目分析:

循环2维数组,找到其值为1的元素,count++,

然后递归改变其上下左右为1的元素值为0,

循环继续。

 

源码:

class Solution:
    # @param {boolean[][]} grid a boolean 2D matrix
    # @return {int} an integer
    def numIslands(self, grid):
        # Write your code here
        if grid is None: return None
        if grid == []: return 0
        # 当数组不为空时,计算行数和列数
        self.n = len(grid)
        self.m = len(grid[0])
        x = 0
        for i in range(self.n):
            for j in range(self.m):
                if grid[i][j] == 1:
                    x += 1
                    grid = self.change(grid,i,j)
        return x
    
    def change(self,grid,i,j):
        grid[i][j] = 0
        if i > 0 and grid[i-1][j] == 1:
            # 置当前点上边的点为0
            grid = self.change(grid,i-1,j)
        if i < self.n-1 and grid[i+1][j] == 1:
            # 置当前点下边的点为0
            grid = self.change(grid,i+1,j)
            
        if j < self.m-1 and grid[i][j+1] == 1:
            # 置当前点右方的点为0
            grid = self.change(grid,i,j+1)
        if j > 0 and grid[i][j-1] == 1:
            # 置当前点左方的点为0
            grid = self.change(grid,i,j-1)
        return grid

以上是关于LintCode Python 简单级题目 433.岛屿的个数的主要内容,如果未能解决你的问题,请参考以下文章

LintCode Python 简单级题目 82.落单的数

LintCode Python 简单级题目 517.丑数

LintCode Python 简单级题目 373.奇偶分割数组

LintCode Python 简单级题目 423.有效的括号序列

LintCode Python 简单级题目 35.翻转链表

LintCode Python 简单级题目 39.恢复旋转排序数组