当前位置: 首页 > 后端技术 > Java

Leetcode岛屿相关问题

时间:2023-04-01 16:27:44 Java

Leetcode200岛屿数量给你一个由'1'(陆地)和'0'(水)组成的二维网格,请计算网格中岛屿的数量。岛屿总是被水包围,每个岛屿只能通过连接水平和/或垂直相邻的陆地才能形成。此外,您可以假设网格的所有四个侧面都被水包围。示例1:输入:grid=[["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]]输出:1个例子2:输入:grid=[["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]]输出:3个想法input是一个二维数组,遍历这个二维数组,如果当前为1,则进入感染函数,岛数加1。感染函数(也叫深度优先搜索)其实是一个递归的标注过程,会将所有相连的1标注为2。为什么要贴标签?这样就避免了遍历过程中的重复计数。一个岛上所有的1都变成2后,遍历的时候就不会重复遍历了(其实也可以标记为0)。参考代码classSolution{publicintnumIslands(char[][]grid){intcount=0;for(inti=0;i=grid.length||j<0||j>=grid[0].length||grid[i][j]!='1'){返回;}网格[i][j]='2';感染(网格,i+1,j);感染(网格,i-1,j);感染(网格,我,j+1);感染(网格,我,j-1);}}注意事项:1.注意矩阵中的类型是char;2.判断感染函数中的边界条件;3、Java中,单引号''代表char类型,双引号""代表字符串;一个非空的二维数组grid。一个岛就是一些相邻的1(代表陆地)的组合,这里的“相邻”要求两个1在水平或垂直方向上必须相邻。您可以假设网格的所有四个边都被零(代表水)包围。在给定的二维数组中找到最大的岛屿面积。(如果没有岛屿,面积返回为0。)示例1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]应该为给定矩阵返回6多于。请注意,答案不应为11,因为该岛只能在四个方向(水平或垂直)上包含1。示例2:[[0,0,0,0,0,0,0,0]]对上面给定的矩阵返回0。思路同上,遍历二维数组,遇到1时进入infection函数,将周围区域标记为0,递归计算岛的面积。参考代码classSolution{publicintmaxAreaOfIsland(int[][]grid){intmax=0;for(inti=0;i=grid.length||j<0||j>=grid[0].length||grid[i][j]!=1){返回0;}网格[i][j]=0;整数计数=1;计数+=感染(网格,i+1,j);计数+=感染(网格,i-1,j);count+=infect(grid,i,j+1);计数+=感染(网格,我,j-1);返回计数;}}注意事项:1、注意矩阵中的类型为int;2、这里的感染函数需要有返回值;