From a42a7ae327b42c3f245a0cc9b1845277c8d8e846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= Date: Mon, 2 Sep 2019 17:29:55 +0800 Subject: [PATCH] Create 200. Number of Islands.md --- solutions/200. Number of Islands.md | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 solutions/200. Number of Islands.md diff --git a/solutions/200. Number of Islands.md b/solutions/200. Number of Islands.md new file mode 100644 index 0000000..cd1321f --- /dev/null +++ b/solutions/200. Number of Islands.md @@ -0,0 +1,38 @@ +# [200. Number of Islands](https://leetcode.com/problems/number-of-islands/) +# 思路 +求岛屿数量. 简单用DFS或者BFS就可以了. 下面代码用的DFS. + +> 亲测visited数组定义成bool型要比定义成int型慢不少. + +# C++ +``` C++ +class Solution { + private: + vectordx{-1, 1, 0, 0}; // 上下左右四个方向 + vectordy{0, 0, -1, 1}; + void DFS(int i, int j, const vector>& grid, vector< vector>& visited){ + if(i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size()) return; + if(visited[i][j] || grid[i][j] == '0') return; + + visited[i][j] = 1; + for(int k = 0; k < 4; k++) + DFS(i + dx[k], j + dy[k], grid, visited); + } +public: + int numIslands(vector>& grid) { + int m = grid.size(), res = 0; + if(!m) return 0; + int n = grid[0].size(); + + vector< vector>visited(m, vector(n, 0)); // int比bool型数组快 + for(int i = 0; i < m; i++){ + for(int j = 0; j < n; j++){ + if(visited[i][j] || grid[i][j] == '0') continue; + DFS(i, j, grid, visited); + res++; + } + } + return res; + } +}; +```