Post

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;
    }
}

几个细节

  1. Java不需要用&来表示数组的引用传参,因为数组本来就是引用类型;
  2. 数组作为函数参数,不能指定其大小:如void func(int grid[a][b]){}会引发编译错误,必须改成void func(int[][] grid){}

  3. Java遍历二维数组
    1
    2
    3
    4
    5
    
    for (int i = 0; i < array.length; i++) {
             for (int j = 0; j < array[i].length; j++) {
                 //...
             }
         }
    

    注意两个上界:array.lengtharray[i].length

在Java中,数组不使用length()方法,而是使用length属性

This post is licensed under CC BY 4.0 by the author.