力扣热题岛屿数量
最近赶ddl刷题时间变少了,当然每天的打卡还是继续
要点: 其实这道题和计算岛屿周长那道题很像,我是固定思路:外层围一圈’0‘防止越界啥的(毫无卵用 ),然后对为’1‘的方块进行递归检索,找其周围为’1‘的直到全部改成’0‘,仔细一想其实和计算图的连通分量的DFS一样,既然是图的话用队列进行深度优先当然也是可以的。官方题解的并查集装作没看到
int numIslands(vector<vector<char>>& grid) {
int len1=grid.size();
int len2=grid[0].size();
vector<vector<char> > temp(len1+2,vector<char>(len2+2,'0'));
int k=0; //外围围一圈'0'
for(int i=0;i<temp.size();i++)
{
vector<char> temp1;
if(i>=1&&k<len1)
{
for(int j=0;j<len2;j++)
{
temp[i][j+1]=grid[k][j];
}
k++;
}
}
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(temp[i][j]=='1') //递归检查连通分量
{
check(temp,i,j);
++all;
}
}
}
return all;
}
void check(vector<vector<char> > &res,int pos1,int pos2)
{ //憨憨递归写法,建议不看
if((pos1>=0&&pos1<res.size())&&(pos2>=0&&pos2<res[0].size()))
{
if(res[pos1][pos2]=='1')
{
res[pos1][pos2]='0';
pos1--;
check(res,pos1,pos2);
pos1+=2;
check(res,pos1,pos2);
pos1--;
pos2++;
check(res,pos1,pos2);
pos2-=2;
check(res,pos1,pos2);
pos2++;
}
}
}