Level 1 (day 9)
第一题
题目链接:https://leetcode.cn/problems/flood-fill/
个人题解:经典flood-fill算法,DFS即可
代码:
class Solution {
public:
int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0};
void dfs(vector<vector<int>>& image, int sr, int sc, int u, int color){
int n=image.size(),m=image[0].size();
if(image[sr][sc]==u){
image[sr][sc]=color;
for(int i=0;i<4;i++){
int a=sr+dx[i],b=sc+dy[i];
if(a>=0 && a<n && b>=0 && b<m){
dfs(image,a,b,u,color);
}
}
}
}
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
int u=image[sr][sc];
if(u!=color) dfs(image,sr,sc,u,color);
return image;
}
};
第二题
题目链接:https://leetcode.cn/problems/number-of-islands/
个人题解:DFS即可
代码:
class Solution {
public:
vector<vector<char>> g;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
void dfs(int x,int y){
g[x][y]=0;
for(int i=0;i<4;i++){
int a=x+dx[i],b=y+dy[i];
if(a>=0 && a<g.size() && b>=0 && b<g[a].size() && g[a][b]=='1'){
dfs(a,b);
}
}
}
int numIslands(vector<vector<char>>& grid) {
g=grid;
int res=0,m=grid.size(),n=grid[0].size();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(g[i][j]=='1'){
dfs(i,j);
res++;
}
}
}
return res;
}
};