150 字
1 分钟
LeetCode 面试经典150题 [81/150 岛屿数量]
题目描述
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1:
输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:
输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"]]输出:3个人C++解答
递归搜索,果然一使用递归就有点不会了,说是深度优先搜索,但是没感觉到像
class Solution {public: void dfs(vector<vector<char>>& grid, int i, int j) { int i_num = grid.size(); int j_num = grid[0].size();
grid[i][j] = '0';
if (i - 1 >= 0 && grid[i - 1][j] == '1') dfs(grid, i - 1, j); if (i + 1 < i_num && grid[i + 1][j] == '1') dfs(grid, i + 1, j); if (j - 1 >= 0 && grid[i][j - 1] == '1') dfs(grid, i, j - 1); if (j + 1 < j_num && grid[i][j + 1] == '1') dfs(grid, i, j + 1); } int numIslands(vector<vector<char>>& grid) { int i_num = grid.size(); if (!i_num) return 0; int j_num = grid[0].size();
int ans = 0; for (int i = 0; i < i_num; i++) { for (int j = 0; j < j_num; j++) { if (grid[i][j] == '1') { ++ans; dfs(grid, i, j); } } } return ans; }}; 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
LeetCode 面试经典150题 [81/150 岛屿数量]
https://ericonline.cn/posts/leetcode-面试经典150题-81-150-岛屿数量/ 部分信息可能已经过时
相关文章 智能推荐
随机文章 随机推荐