694. Number of Distinct Islands 694.独立岛屿数

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

Count the number of distinct islands. An island is considered to be the same as another if and only if one island can be translated (and not rotated or reflected) to equal the other.

Example 1:

11000
11000
00011
00011

Given the above grid map, return 1.

 

Example 2:

11011
10000
00001
11011

Given the above grid map, return 3.

Notice that:

11
1

and

 1
11

思路:只要加一句条件,统一判断岛的x y是否超出边界就行了。不需要每个点都判断一遍

通用的思路:基础点要是1才行,统计之后记为0

数岛的面积一般返回int

用set消除重复性:同一个点去扩散不能有重复,开一个set。所有点去扩散,遍地开花,再开一个set

现有坐标和基础坐标有区别:参数里还要加个baseX, baseY

class Solution {
    public int numDistinctIslands(int[][] grid) {
        //cc
        if (grid == null || grid.length == 0 || grid[0].length == 0) 
            return 0;
        
        Set<String> result = new HashSet<>();
        
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == 1) {
                    Set<String> set = new HashSet<>();
                    dfs(grid, i, j, i, j, set);
                    result.add(set.toString());
                }
            }
        }
        
        return result.size();
    }
    
    public int dfs(int[][] grid, int i, int j, int baseX, int baseY, 
                  Set<String> set) {
        //cc
        if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length)
            return 0;
        
        if (grid[i][j] == 1) {
            String distanceString = String.valueOf(i - baseX) + "_" + String.valueOf(j - baseY);
            set.add(distanceString);
            
            grid[i][j] = 0;
            dfs(grid, i + 1, j, baseX, baseY, set);
            dfs(grid, i - 1, j, baseX, baseY, set);
            dfs(grid, i, j + 1, baseX, baseY, set);
            dfs(grid, i, j - 1, baseX, baseY, set);
        }
        
        return set.size();
    }
}
View Code

 



posted @ 2020-07-06 11:01  苗妙苗  阅读(101)  评论(0编辑  收藏  举报