标签:整数 示例 turn style solution 计算 需要 水平 private
你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。
示例:
输入:
[
[0,2,1,0],
[0,1,0,1],
[1,1,0,1],
[0,1,0,1]
]
输出: [1,2,4]
提示:
0 < len(land) <= 1000
0 < len(land[i]) <= 1000
code:dfs
class Solution { private: void dfs(int i, int j, int &count, vector<vector<int>> &arr) { if(i < 0 || i >= arr.size() || j < 0 || j >= arr[0].size() || arr[i][j] != 0) { return ; } if (arr[i][j] == 0) { ++count; arr[i][j] = 1; } dfs(i+1, j, count, arr); dfs(i-1, j, count, arr); dfs(i, j+1, count, arr); dfs(i, j-1, count, arr); dfs(i+1, j+1, count, arr); dfs(i+1, j-1, count, arr); dfs(i-1, j+1, count, arr); dfs(i-1, j-1, count, arr); } public: vector<int> pondSizes(vector<vector<int>>& land) { if (land.empty() || land[0].size() == 0) { return {}; } vector<vector<int>> arr(land); vector<int> res; int count = 0; for(int i = 0; i < arr.size(); ++i) { for(int j = 0; j < arr[0].size(); ++j) { if(arr[i][j] == 0) { dfs(i, j, count, arr); res.push_back(count); count = 0; } } } sort(res.begin(), res.end()); return res; } };
标签:整数 示例 turn style solution 计算 需要 水平 private
原文地址:https://www.cnblogs.com/tianzeng/p/13582006.html