Lc.200 岛屿数量
Lc.200 岛屿数量
这篇题解很清晰地解释了从二叉树DFS到图DFS的推导过程,一定要看!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
//数组作为参数的格式:"char[][] grid"(不能指定长度)
void travel(char[][] grid,int x,int y){ //Java的数组不需要&来引用传参,因为是引用类型
if(notInArea(grid,x,y)){return;}
if(grid[x][y]=='0'||grid[x][y]=='2'){return;}
grid[x][y]='2';
travel(grid,x+1,y);
travel(grid,x,y+1);
travel(grid,x-1,y);
travel(grid,x,y-1);
}
boolean notInArea(char [][]grid,int x,int y){
return x<0||x>=grid.length||y<0||y>=grid[0].length; //这里应该用x>=grid.length和y>=grid[0].length,因为下表的最大值是length-1
}
public int numIslands(char[][] grid) {
int result=0;
//注意java如何遍历二维数组!
for(int i=0;i<grid.length;i++){//在Java中,数组不使用length()方法,而是使用length属性
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]=='1'){
travel(grid,i,j);
result+=1;
}
}
}
return result;
}
}
几个细节
- Java不需要用
&
来表示数组的引用传参,因为数组本来就是引用类型; 数组作为函数参数,不能指定其大小:如
void func(int grid[a][b]){}
会引发编译错误,必须改成void func(int[][] grid){}
- Java遍历二维数组
1 2 3 4 5
for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { //... } }
注意两个上界:
array.length
和array[i].length
在Java中,数组不使用length()方法,而是使用length属性
This post is licensed under CC BY 4.0 by the author.