classSolution: defnumIslands(self, grid: List[List[str]]) -> int: m = len(grid) n = len(grid[0]) ans = 0 defexpand(y:int , x:int) : #递归深搜,输入一个坐标然后把整个小岛都扩散一遍,一边扩散一边把1置0 # 边界条件 if y < 0or y > m - 1or x < 0or x > n - 1or grid[y][x] == "0": return else: grid[y][x] = "0" expand(y-1,x) expand(y+1,x) expand(y,x-1) expand(y,x+1) for i inrange(m): for j inrange(n): if grid[i][j] == "1": expand(i,j) ans += 1 return ans
# 基本上和python实现思路相同,只是我为了熟悉写cpp所以又写了一遍 classSolution { public: intnumIslands(vector<vector<char>>& grid){ int m = grid.size(); int n = grid[0].size(); int ans = 0;
auto expand = [&](thisauto&& expand, int y, int x) { if (y < 0 || y >= m || x < 0 || x >= n || grid[y][x] == '0') return;
grid[y][x] = '0'; expand(y - 1, x); expand(y + 1, x); expand(y, x - 1); expand(y, x + 1); };
for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (grid[i][j] == '1') { expand(i, j); ++ans; } } } return ans; } };