zoukankan      html  css  js  c++  java
  • 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
    
    
    


  • 相关阅读:
    odoo12 权限配置1
    Python 安装第三方库,pip install 安装慢,安装不上的解决办法
    odoo12 如何设置超级用户
    Python odoo中嵌入html简单的分页功能
    odoo Windows10启动debug模式报错(Process finished with exit code -1073740940 (0xC0000374))
    Python数据可视化库-Matplotlib(二)
    Python数据可视化库-Matplotlib(一)
    Python Pandas库的学习(三)
    Python Pandas库的学习(二)
    Python Pandas库的学习(一)
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13253728.html
Copyright © 2011-2022 走看看