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
    
    
    


  • 相关阅读:
    基于ASP.NET的comet简单实现
    常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例
    关于Application.Lock和Lock(obj)
    asp.net 母版页使用详解--转
    ASP.NET 全局变量和页面间传值方法
    黑帽大会2014:10个酷炫的黑客工具
    python之高性能网络编程并发框架eventlet实例
    eCos中的线程与同步
    Ubuntu12.04 下修改Apache端口号
    PHP 之mysql空字符串问题
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13253728.html
Copyright © 2011-2022 走看看