LeetCode 200. 島嶼的個數(C、C++、python)
阿新 • • 發佈:2018-12-16
給定一個由 '1'
(陸地)和 '0'
(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入: 11110 11010 11000 00000 輸出: 1
示例 2:
輸入: 11000 11000 00100 00011 輸出: 3
C
void DFS(char** tmp,int row,int col,int m,int n) { tmp[row][col]='a'; if(row-1>=0 && '1'==tmp[row-1][col]) { DFS(tmp,row-1,col,m,n); } if(row+1<=m-1 && '1'==tmp[row+1][col]) { DFS(tmp,row+1,col,m,n); } if(col-1>=0 && '1'==tmp[row][col-1]) { DFS(tmp,row,col-1,m,n); } if(col+1<=n-1 && '1'==tmp[row][col+1]) { DFS(tmp,row,col+1,m,n); } } int numIslands(char** grid, int gridRowSize, int gridColSize) { int m=gridRowSize; int n=gridColSize; if(0==m || 0==n) { return 0; } int count=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if('1'==grid[i][j]) { count++; DFS(grid,i,j,m,n); } } } return count; }
C++
class Solution { public: void DFS(vector<vector<char>>& tmp,int row,int col) { tmp[row][col]='a'; if(row-1>=0 && '1'==tmp[row-1][col]) { DFS(tmp,row-1,col); } if(row+1<=tmp.size()-1 && '1'==tmp[row+1][col]) { DFS(tmp,row+1,col); } if(col-1>=0 && '1'==tmp[row][col-1]) { DFS(tmp,row,col-1); } if(col+1<=tmp[0].size()-1 && '1'==tmp[row][col+1]) { DFS(tmp,row,col+1); } } int numIslands(vector<vector<char>>& grid) { if(grid.empty() || grid[0].empty()) { return 0; } int m=grid.size(); int n=grid[0].size(); int count=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if('1'==grid[i][j]) { count++; DFS(grid,i,j); } } } return count; } };
python
class Solution: def DFS(self,tmp,row,col): tmp[row][col]='a' if row-1>=0 and '1'==tmp[row-1][col]: self.DFS(tmp,row-1,col) if row+1<=len(tmp)-1 and '1'==tmp[row+1][col]: self.DFS(tmp,row+1,col) if col-1>=0 and '1'==tmp[row][col-1]: self.DFS(tmp,row,col-1) if col+1<=len(tmp[0])-1 and '1'==tmp[row][col+1]: self.DFS(tmp,row,col+1) def numIslands(self, grid): """ :type grid: List[List[str]] :rtype: int """ if []==grid or [[]]==grid: return 0 m=len(grid) n=len(grid[0]) count=0 for i in range(m): for j in range(n): if '1'==grid[i][j]: count+=1 self.DFS(grid,i,j) return count