leetcode思路总结反思(dfs篇)
130. Surrounded Regions (dfs蚕食法专题)
使用dfs,利用“蚕食法”,核心代码模板如下:
for(int i=0;i<row;i++)
{
check(board,i,0,row,col);
check(board,i,col-1,row,col);
}
for(int i=1;i+1<col;i++)
{
check(board,0,i,row,col);
check(board,row-1,i,row,col);
}
void check(vector<vector<char>>& board,int i,int j,int& row,int& col)
{
if(board[i][j]=='O')
{
board[i][j]='c';
if(i+1<row-1)
check(board,i+1,j,row,col);
if(i-1>0)
check(board,i-1,j,row,col);
if(j+1<col-1)
check(board,i,j+1,row,col);
if(j-1>0)
check(board,i,j-1,row,col);
}
}
类似题还有 :
200. Number of Islands(该题还可以利用bfs求解)
695. Max Area of Island
463. Island Perimeter
数学脑洞题,设置两个变量nums,subs,然后遍历每一个节点,如果节点为1,则nums++,在此基础上,再判断该节点右边和下边的节点是否为1,若为1,则subs++;最终返回结果4nums-2subs.详细代码如下
int nums = 0;
int subs = 0;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(grid[i][j]==1)
{
nums++;
if(i+1<row&&grid[i+1][j]==1)
subs++;
if(j+1<col&&grid[i][j+1]==1)
subs++;
}
}
}
return 4*nums-2*subs;