要点:对遍历到了的格子进行标记。
200. 岛屿数量
题目:200. 岛屿数量
如果不让在原数据上修改,就用visited来记录。
class Solution {public int numIslands(char[][] grid) {int m=grid.length;int n=grid[0].length;int count=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]=='1'){count++;dfs(i,j,grid);}}}return count;}private void dfs(int i,int j,char[][] grid){int m=grid.length;int n=grid[0].length;if(i>=0&&j>=0&&i<m&&j<n&&grid[i][j]=='1'){grid[i][j]='0';dfs(i+1,j,grid);dfs(i-1,j,grid);dfs(i,j+1,grid);dfs(i,j-1,grid);}}}
695. 岛屿的最大面积
题目:695. 岛屿的最大面积
class Solution {public int maxAreaOfIsland(int[][] grid) {if(grid==null||grid.length==0) return 0;int m=grid.length;int n=grid[0].length;int maxArea=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){maxArea=Math.max(maxArea,dfs(grid,i,j));}}return maxArea;}private int dfs(int[][] grid,int i,int j){if(grid==null||grid.length==0) return 0;int m=grid.length;int n=grid[0].length;if(i<0||j<0||i>=m||j>=n||grid[i][j]==0){return 0;}int area=1;grid[i][j]=0;area+=dfs(grid,i+1,j);area+=dfs(grid,i-1,j);area+=dfs(grid,i,j+1);area+=dfs(grid,i,j-1);return area;}}
130. 被围绕的区域
题目:130. 被围绕的区域
class Solution {public void solve(char[][] board) {int m=board.length;int n=board[0].length;for(int i=0;i<m;i++){if(board[i][0]=='O') dfs(board, i, 0);if(board[i][n-1]=='O') dfs(board, i, n-1);}for(int j=0;j<n;j++){if(board[0][j]=='O') dfs(board, 0, j);if(board[m-1][j]=='O') dfs(board, m-1, j);}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(board[i][j]=='O') board[i][j]='X';if(board[i][j]=='#') board[i][j]='O';}}}private void dfs(char[][] board,int i,int j){int m=board.length;int n=board[0].length;if(i<0||j<0||i>=m||j>=n||board[i][j]!='O') return;board[i][j]='#';dfs(board, i+1, j);dfs(board, i-1, j);dfs(board, i, j+1);dfs(board, i, j-1);}}
