694 Number of Distinct Islands

class Solution {
    public int numDistinctIslands(int[][] grid) {
        if (grid == null || grid.length == 0) return 0;
        int n = grid.length, m = grid[0].length;

        Set<String> hash = new HashSet<>();
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                if (grid[i][j] == 1){
                    StringBuilder sb = new StringBuilder();
                    dfs(i, j, grid, "s", sb);
                    grid[i][j] = 0;

                    hash.add(sb.toString());
                }
            }
        }

        return hash.size();
    }

    private void dfs(int x, int y, int[][] grid, String dir, StringBuilder sb){
        if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == 0) return;

        sb.append(dir);
        grid[x][y] = 0;
        dfs(x, y + 1, grid, "r", sb);
        dfs(x + 1, y, grid, "d", sb);
        dfs(x, y - 1, grid, "l", sb);
        dfs(x - 1, y, grid, "u", sb);
        sb.append("e");
    }
}

为什么这个版本错

class Solution {
    public int numDistinctIslands(int[][] grid) {
        if (grid == null || grid.length == 0) return 0;
        int n = grid.length, m = grid[0].length;

        Set<String> hash = new HashSet<>();
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                if (grid[i][j] == 1){
                    StringBuilder sb = new StringBuilder();
                    dfs(i, j, grid, "s", sb);
                    grid[i][j] = 0;
                    sb.append("e");
                    hash.add(sb.toString());
                }
            }
        }

        return hash.size();
    }

    private void dfs(int x, int y, int[][] grid, String dir, StringBuilder sb){
        if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == 0) return;

        sb.append(dir);
        grid[x][y] = 0;
        dfs(x, y + 1, grid, "r", sb);
        dfs(x + 1, y, grid, "d", sb);
        dfs(x, y - 1, grid, "l", sb);
        dfs(x - 1, y, grid, "u", sb);

    }
}

results matching ""

    No results matching ""