class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n=digits.size();
for(int i=n-1;i>=0;--i){
if(digits[i]!=9){
digits[i]++;
for(int j=i+1;j<n;++j){
digits[j]=0;
}
return digits;
}
}
vector<int> res(n+1);
res[0]=1;
return res;
}
};
class Solution {
public:
void dfs(vector<vector<char>>& grid,int i,int j){
grid[i][j]='2';
if(i-1>=0&&grid[i-1][j]=='1'){
dfs(grid,i-1,j);
}
if(j-1>=0&&grid[i][j-1]=='1'){
dfs(grid,i,j-1);
}
if(j+1<grid[0].size()&&grid[i][j+1]=='1'){
dfs(grid,i,j+1);
}
if(i+1<grid.size()&&grid[i+1][j]=='1'){
dfs(grid,i+1,j);
}
}
int numIslands(vector<vector<char>>& grid) {
int n=grid.size();
int m=grid[0].size();
int num=0;
if(!n){
return 0;
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(grid[i][j]=='1'){
++num;
dfs(grid,i,j);
}
}
}
return num;
}
};
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int n=grid.size();
int m=grid[0].size();
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(grid[i][j]==1){
return dfs(grid,i,j);
}
}
}
return 0;
}
int dfs(vector<vector<int>>& grid,int i,int j){
if(!(i>=0&&i<grid.size()&&j>=0&&j<grid[0].size())){
return 1;
}
if(grid[i][j]==0){
return 1;
}
if(grid[i][j]==2){
return 0;
}
grid[i][j]=2;
return dfs(grid,i-1,j)+dfs(grid,i+1,j)+dfs(grid,i,j-1)+dfs(grid,i,j+1);
}
};
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int n=grid.size();
int m=grid[0].size();
int ans=0;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(grid[i][j]==1){
ans=max(ans,dfs(grid,i,j));
}
}
}
return ans;
}
int dfs(vector<vector<int>>& grid,int i,int j){
if(!(i>=0&&i<grid.size()&&j>=0&&j<grid[0].size())||grid[i][j]!=1){
return 0;
}
grid[i][j]=2;
int di[4]={1,-1,0,0};
int dj[4]={0,0,1,-1};
int area=1;
for(int k=0;k<4;++k){
int r=i+di[k];
int c=j+dj[k];
area+=dfs(grid,r,c);
}
return area;
}
};