腾讯面试题:岛屿数量
生活随笔
收集整理的這篇文章主要介紹了
腾讯面试题:岛屿数量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
給定一個由?'1'(陸地)和?'0'(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,并且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入: 11110 11010 11000 00000輸出: 1示例 2:
輸入: 11000 11000 00100 00011輸出: 3深度優先搜索:
class Solution { private: //深度優先遍歷 (0,1)void dfs(vector<vector<char>>& grid, int r, int c) {//行int nr = grid.size();//列int nc = grid[0].size();//每個搜索到的 11 都會被重新標記為 00grid[r][c] = '0';if (r - 1 >= 0 && grid[r-1][c] == '1') dfs(grid, r - 1, c);if (r + 1 < nr && grid[r+1][c] == '1') dfs(grid, r + 1, c);if (c - 1 >= 0 && grid[r][c-1] == '1') dfs(grid, r, c - 1);if (c + 1 < nc && grid[r][c+1] == '1') dfs(grid, r, c + 1);}public:int numIslands(vector<vector<char>>& grid) {//行shuint nr = grid.size();if (!nr) return 0;//列數int nc = grid[0].size();int num_islands = 0;for (int r = 0; r < nr; ++r) {for (int c = 0; c < nc; ++c) {if (grid[r][c] == '1') {++num_islands;dfs(grid, r, c);}}}return num_islands;} };廣度優先搜索:
class Solution { public://廣度優先遍歷int numIslands(vector<vector<char>>& grid) {int nr = grid.size();if (!nr) return 0;int nc = grid[0].size();int num_islands = 0;for (int r = 0; r < nr; ++r) {for (int c = 0; c < nc; ++c) {if (grid[r][c] == '1') {++num_islands;grid[r][c] = '0';queue<pair<int, int>> neighbors;neighbors.push({r, c});while (!neighbors.empty()) {auto rc = neighbors.front();//出隊neighbors.pop();int row = rc.first, col = rc.second;if (row - 1 >= 0 && grid[row-1][col] == '1') {neighbors.push({row-1, col});grid[row-1][col] = '0';}if (row + 1 < nr && grid[row+1][col] == '1') {neighbors.push({row+1, col});grid[row+1][col] = '0';}if (col - 1 >= 0 && grid[row][col-1] == '1') {neighbors.push({row, col-1});grid[row][col-1] = '0';}if (col + 1 < nc && grid[row][col+1] == '1') {neighbors.push({row, col+1});grid[row][col+1] = '0';}}}}}return num_islands;} };?
?
參考地址:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/
總結
以上是生活随笔為你收集整理的腾讯面试题:岛屿数量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gRPC优点
- 下一篇: 京东面试题:二叉树直径