算法面试——岛屿问题:岛屿数量、最大面积、周长
岛屿问题的核心是 DFS 遍历二维数组把连通的 1 标记为已访问。一、岛屿数量publicintnumIslands(char[][]grid){intcount0;for(inti0;igrid.length;i){for(intj0;jgrid[0].length;j){if(grid[i][j]1){dfs(grid,i,j);count;}}}returncount;}privatevoiddfs(char[][]grid,intr,intc){if(r0||c0||rgrid.length||cgrid[0].length||grid[r][c]!1)return;grid[r][c]0;// 标记已访问dfs(grid,r-1,c);dfs(grid,r1,c);dfs(grid,r,c-1);dfs(grid,r,c1);}二、岛屿的最大面积publicintmaxAreaOfIsland(int[][]grid){intmaxArea0;for(inti0;igrid.length;i){for(intj0;jgrid[0].length;j){if(grid[i][j]1){maxAreaMath.max(maxArea,dfs(grid,i,j));}}}returnmaxArea;}privateintdfs(int[][]grid,intr,intc){if(r0||c0||rgrid.length||cgrid[0].length||grid[r][c]!1)return0;grid[r][c]0;return1dfs(grid,r-1,c)dfs(grid,r1,c)dfs(grid,r,c-1)dfs(grid,r,c1);}三、岛屿的周长publicintislandPerimeter(int[][]grid){for(inti0;igrid.length;i){for(intj0;jgrid[0].length;j){if(grid[i][j]1)returndfs(grid,i,j);}}return0;}privateintdfs(int[][]grid,intr,intc){if(r0||c0||rgrid.length||cgrid[0].length||grid[r][c]0)return1;if(grid[r][c]2)return0;grid[r][c]2;returndfs(grid,r-1,c)dfs(grid,r1,c)dfs(grid,r,c-1)dfs(grid,r,c1);} 觉得有用的话点赞 关注【张老师技术栈】吧