//463. 岛屿的周长
//最先想到的是dfs,一直搜到头,记录答案
class Solution {
public:
vector<pair<int, int>>ns;
int m, n;
void dfs(vector<vector<int>>& grid, int i, int j) {
if (i < 0 || j < 0 || i >= n || j >= m || grid[i][j] == 0) {
ns.emplace_back(i, j);
return;
}
if (grid[i][j] < 0) return;
grid[i][j] = -1;
dfs(grid, i - 1, j);
dfs(grid, i, j - 1);
dfs(grid, i + 1, j);
dfs(grid, i, j + 1);
}
int islandPerimeter(vector<vector<int>>& grid) {
n = grid.size();
if (n == 0) return 0;
m = grid.front().size();
if (m == 0) return 0;
int cnt = 0;
int i, j;
while (cnt < m * n) {
i = cnt / m;
j = cnt % m;
if (grid[i][j]) break;
cnt++;
}
if (cnt == m * n) return 0;
dfs(grid, i, j);
return ns.size();
}
};
//但是可以换个思路
//遍历每个方块,判断是否四个边是否为边界
//计数即可
class Solution {
public:
int m, n;
int islandPerimeter(vector<vector<int>>& grid) {
int ans = 0;
n = grid.size();
if (n == 0) return 0;
m = grid.front().size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 0) continue;
if (i - 1 < 0 || grid[i - 1][j] == 0) ans++;
if (j - 1 < 0 || grid[i][j - 1] == 0) ans++;
if (i + 1 >= n || grid[i + 1][j] == 0) ans++;
if (j + 1 >= m || grid[i][j + 1] == 0) ans++;
}
}
return ans;
}
};
LeetCode463. 岛屿的周长
最新推荐文章于 2022-06-11 11:15:07 发布