有效的网站推广方案,wordpress 图片不显示,搜索引擎优化seo培训,传奇手游排行榜2021前十名题目
给你一个由 1#xff08;陆地#xff09;和 0#xff08;水#xff09;组成的的二维网格#xff0c;请你计算网格中岛屿的数量。
岛屿总是被水包围#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外#xff0c;你可以假设该网格的…题目
给你一个由 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提示
m grid.lengthn grid[i].length1 m, n 300grid[i][j] 的值为 0 或 1 解答
源代码
class Solution {public int numIslands(char[][] grid) {int count 0;for (int i 0; i grid.length; i) {for (int j 0; j grid[0].length; j) {if (grid[i][j] 1) {infect(grid, i, j);count;}}}return count;}public void infect(char[][] grid, int i, int j) {if (i 0 i grid.length j 0 j grid[0].length grid[i][j] 1) {grid[i][j] 2;} else {return;}infect(grid, i - 1, j);infect(grid, i 1, j);infect(grid, i, j - 1);infect(grid, i, j 1);}
}
总结
这道题给我拓展了一个新的解题思路讨论区大佬起名为“感染函数”遍历检测到1时就进入感染函数将这个1能连接到的所有1包括它本身都变为2这样0代表水1代表未遍历过的陆地2代表已经遍历过的陆地。那么就可以做到当到达一个未曾来到过的岛屿时我们把这片岛屿的陆地全部遍历一遍那么之后就算再次来到这片岛屿的陆地也不会错把岛屿数量增加。