Number of Distinct Islands
11000
11000
00011
0001111011
10000
00001
11011Last updated
11000
11000
00011
0001111011
10000
00001
11011Last updated
11
1 1
11class Solution:
def numDistinctIslands(self, grid: List[List[int]]) -> int:
if not grid or not grid[0]:
return 0
n, m = len(grid), len(grid[0])
d = [-1, 0, 1, 0, -1]
ss = set()
def dfs(i,j,q):
q.append((i,j))
if grid[i][j] == -1:
return
grid[i][j] = -1
nxy = [(i + d[k], j + d[k + 1]) for k in range(4)]
for nx,ny in nxy:
if 0<= nx < n and 0<= ny< m and grid[nx][ny] == 1:
q.append((nx,ny))
dfs(nx,ny,q)
for i in range(n):
for j in range(m):
if grid[i][j] == 1:
q = []
dfs(i, j, q)
if q:
mini,minj = min(x for x,y in q), min(y for x,y in q)
f = tuple(sorted((x-mini, y-minj) for x, y in q))
ss.add(f)
return len(ss)