链接:www.nowcoder.com/practice/0c…
这题,错了2次,第一次是因为写了2个i,重复了;第二次是因为if(i<0||i>=grid.size()) return;写成了if(i<0||i>grid.size()) return; 所以会发生段错误。实在是太粗心了\
思路:dfs搜索,没什么好说的
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,1,-1};
void dfs(vector<vector<char> >& grid,vector<vector<bool> > &vis,int i,int j)
{
if(i<0||i>=grid.size()) return;
if(j<0||j>=grid[0].size()) return;
if(grid[i][j]=='0' || vis[i][j]) return ;
vis[i][j] = true;
// cout<<i<<' '<<j<<endl;
for(int ca=0;ca<4;ca++) {
// cout<<i+dx[ca]<<'!'<<j+dy[ca]<<endl;
dfs(grid, vis, i+dx[ca], j+dy[ca]);
}
}
int solve(vector<vector<char> >& grid) {
// write code here
if(grid.empty() || grid[0].empty()) return 0;
int n = grid.size(), m=grid[0].size();
vector<vector<bool> >vis(n,vector<bool>(m));
int cnt=0;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(grid[i][j] == '0' || vis[i][j]) continue;
++cnt;
dfs(grid, vis, i, j);
// cout<<endl;
}
}
return cnt;
}
};