每天一道LeetCode-----给定二维数组代表海域和岛屿,计算有多少个孤岛
2018-03-02 16:06
513 查看
Number of Islands
原题链接Number of Islands给定一个二位数组,其中’0’代表水,’1’代表土地,判断有多少个孤岛被水隔开。假定二位数组四周都是’0’
思路:
遇到一个’1’就代表肯定有孤岛,然后从这个位置开始将所有相邻的’1’都变为’0’
代码如下
class Solution { public: int numIslands(vector<vector<char>>& grid) { int n = 0; for(int i = 0; i < grid.size(); ++i) { for(int j = 0; j < grid[i].size(); ++j) { if(grid[i][j] == '1') { ++n; convert_to_zero(grid, i, j); } } } return n; } private: void convert_to_zero(vector<vector<char>>& grid, int i, int j) { if(grid[i][j] == '0') return; grid[i][j] = '0'; for(auto& dir : dirs) { int row = i + dir[0]; int col = j + dir[1]; if(row < 0 || row >= grid.size() || col < 0 || col >= grid[row].size()) continue; convert_to_zero(grid, row, col); } } static vector<vector<char>> dirs; }; vector<vector<char>> Solution::dirs = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
相关文章推荐
- 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少
- 每天一道LeetCode-----计算字符串s中有多少个子序列和字符串t相等
- 每天一道LeetCode-----平面上n个点,计算最多有多少个点在一条直线上
- 每天一道LeetCode-----计算给定范围内所有数的与运算结果
- 每天一道LeetCode-----计算一个直方图空隙的容量(如果装水能装多少)
- 每天一道LeetCode-----将数字集转成字母集,计算有多少种转换方式
- 每天一道LeetCode-----计算给定序列中所有长度为k的滑动窗的最大值集合
- 每天一道LeetCode-----找到有多少条连续路径的和为给定值,路径不需要从根节点出发到达叶子节点
- 每天一道LeetCode-----计算n的阶乘末尾有多少个0
- 每天一道LeetCode-----计算直方图中最大矩形的面积
- 每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果
- 每天一道LeetCode-----找出给定序列的所有子序列
- 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2
- 每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求
- 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
- 每天一道LeetCode-----买卖商品问题,计算最大利润,分别有一次交易,两次交易,多次交易的情况
- 每天一道LeetCode-----找到给定数组的连续子数组,使这个子数组的和最大,要求复杂度为O(n)
- 每天一道LeetCode-----在给定数组中找到一个子数组,使得这个子数组的元素乘积最大
- 每天一道LeetCode-----计算两个序列最长的公共子序列长度
- 每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和