【leetcode】200.岛屿数量(DFS入门)
实战总结
用char型接收整形int转化为的对应字符要小心
int res;
char = res + '0';
其中 res 的上限是127。
在下面这道题中,笔者一开始想将遍历过的位置更新值为 res + ‘0’,但当岛屿数过多的时候就溢出了,所以还是应该将遍历过的位置更新为‘0’即可
评价:典型的深度优先类型的题
class Solution {
private:
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.size() == 0 || grid[0].size() == 0) return 0;
int res = 1;
auto dfs = [&](auto& dfs, int i, int j) -> void {
for(int k=0; k<4; k++)
{
int cur_i = i + dir[k][0];
int cur_j = j + dir[k][1];
if(cur_i<0 || cur_j<0 || cur_i>=grid.size()|| cur_j>=grid[0].size()) continue;
if(grid[cur_i][cur_j] == '1')
{
grid[cur_i][cur_j] = '0';
dfs(dfs, cur_i, cur_j);
}
}
};
for(int i=0; i<grid.size(); i++)
{
for(int j=0; j<grid[0].size(); j++)
{
if(grid[i][j] == '1')
{
res++;
grid[i][j] = '0';
dfs(dfs, i, j);
}
}
}
return res - 1;
}
};