694.Number of Distinct Islands

1- DFS + HashSet+Stringbuilder

Using Relative Coordinate to form a String as HashKey

class Solution {
    public int numDistinctIslands(int[][] grid) {
        Set<String> set = new HashSet<>();
        for(int i = 0; i < grid.length; i++){
            for(int j = 0; j < grid[0].length; j++){
                if(grid[i][j] != 0){
                    StringBuilder sb = new StringBuilder();
                    dfs(grid, i, j, i, j, sb);
                    grid[i][j] = 0;
                    set.add(sb.toString());
                }
            }
        }
        return set.size();
    }
    public void dfs(int[][] grid, int i, int j, int baseI, int baseJ, StringBuilder sb) {
        if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) return;
        sb.append("<" + (i - baseI ) + "," + (j - baseJ) + ">");
        grid[i][j] = 0;
        dfs(grid, i + 1, j, baseI, baseJ, sb);
        dfs(grid, i - 1, j, baseI, baseJ, sb);
        dfs(grid, i, j - 1, baseI, baseJ, sb);
        dfs(grid, i, j + 1, baseI, baseJ, sb);
    }
}

results matching ""

    No results matching ""