被包围的岛屿_岛屿数量
【摘要】 被围绕的区域被围绕的区域//这里我们采用逆向思维,我们可以找到没有被x全部环绕的O 然后对O进行深度遍历!//标记后,得到新的矩阵,再将所以的O修改成X 再将刚刚标记的改成O!class Solution { int[][] next = {{1,0},{-1,0},{0,1},{0,-1}}; public void DSF(char[][] board,int row,in...
被围绕的区域
//这里我们采用逆向思维,我们可以找到没有被x全部环绕的O 然后对O进行深度遍历!
//标记后,得到新的矩阵,再将所以的O修改成X 再将刚刚标记的改成O!
class Solution {
int[][] next = {{1,0},{-1,0},{0,1},{0,-1}};
public void DSF(char[][] board,int row,int col,int sr,int sc){
//用Z标记该位置
board[sr][sc]='Z';
for(int i = 0;i<next.length;i++){
int x = sr + next[i][0];
int y = sc + next[i][1];
if(x>=row||x<0||y>=col||y<0){
//越界
continue;
}
if(board[x][y]=='O'){
//深度遍历
DSF(board,row,col,x,y);
}
}
}
public void solve(char[][] board) {
int row = board.length;
int col = board[0].length;
//先找边界的O深度遍历修改!
for(int i = 0;i<row;i++){
//左右边界!
if(board[i][0]=='O'){//左边
DSF(board,row,col,i,0);
}
if(board[i][col-1]=='O'){//右边
DSF(board,row,col,i,col-1);
}
}
for(int i = 1;i<col-1;i++){
//上下边界!
if(board[0][i]=='O'){//上边
DSF(board,row,col,0,i);
}
if(board[row-1][i]=='O'){//下边
DSF(board,row,col,row-1,i);
}
}
//遍历将围绕的O修改成X,标记的改为O!
for(int i = 0;i<row;i++){
for(int j = 0;j<col;j++){
if(board[i][j]=='O'){//修改O
board[i][j]='X';
}
if(board[i][j]=='Z'){//修改标记
board[i][j]='O';
}
}
}
}
}
岛屿数量
class Solution {
int[][] next = {{1,0},{-1,0},{0,1},{0,-1}};
public void DSF(char[][] board,int row,int col,int sr,int sc){
//用'2'标记该位置
board[sr][sc]='2';
for(int i = 0;i<next.length;i++){
int x = sr + next[i][0];
int y = sc + next[i][1];
if(x>=row||x<0||y>=col||y<0){
//越界
continue;
}
if(board[x][y]=='1'){
//深度遍历
DSF(board,row,col,x,y);
}
}
}
public int numIslands(char[][] grid) {
int result = 0;
int row = grid.length;
int col = grid[0].length;
for(int i = 0;i<row;i++){
for(int j = 0;j<col;j++){
if(grid[i][j]=='1'){//标记!
DSF(grid,row,col,i,j);
result++;
}
}
}
return result;
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)