題目:
給一個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