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);
}
}