题目:
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
View Code
View Code
在矩阵:
[
[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
个岛.
解题:
在programcreek看到是根据深度优先算法
对某个位置(i,j)
当是1 的时候,是岛屿,该位置设为 0 ,并将四周的 1 设置为 0,这样就是递归思想了
当是0的时候,不是岛屿,寻找下一个位置
Java程序:
public class Solution { /** * @param grid a boolean 2D matrix * @return an integer */ public int numIslands(boolean[][] grid) { // Write your code here int m = grid.length; if(m==0) return 0; int count = 0; int n = grid[0].length; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(grid[i][j]==true){ dfs(grid,i,j); count++; } } } return count; } private void dfs(boolean[][]grid,int i,int j){ if(i<0 || j<0||i>=grid.length || j>=grid[0].length) return ; if(grid[i][j]==true){ grid[i][j]= false; dfs(grid,i-1,j); dfs(grid,i+1,j); dfs(grid,i,j-1); dfs(grid,i,j+1); } } }
总耗时: 9193 ms
Python程序:
class Solution: # @param {boolean[][]} grid a boolean 2D matrix # @return {int} an integer def numIslands(self, grid): # Write your code here m = len(grid) if m==0: return 0 n = len(grid[0]) if n==0: return 0 count = 0 for i in range(m): for j in range(n): if grid[i][j]==True: self.dfs(grid,i,j) count +=1 return count def dfs(self,grid,i,j): if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]): return if grid[i][j]==True: grid[i][j]=False self.dfs(grid,i-1,j) self.dfs(grid,i+1,j) self.dfs(grid,i,j-1) self.dfs(grid,i,j+1)
总耗时: 433 ms