题目:
岛屿的个数
给一个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
个岛.
解题:
在网上看到是根据深度优先算法,和递归思想进行解决的题目,当发现这一点是1的时候,将周围的点都设置成 0,如何设置成 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
时间: 2024-10-05 14:00:16