Number of Distinct Islands
DFS
Problem
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.


Thought Process
Since we are dealing with a distinct characteristic, we can utilize a hash set

Solution
class Solution:
def numDistinctIslands(self, grid: List[List[int]]) -> int:
islandSet = set()
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 1:
self.path = "" #needs to be global variable
self.dfsearch(i,j,grid,"s")
print(self.path)
islandSet.add(self.path)
print(islandSet)
return len(islandSet)
def dfsearch(self, i, j, grid, direction):
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1:
return
grid[i][j] = 0
self.path+=direction
self.dfsearch(i-1,j,grid,"u")
self.dfsearch(i+1,j,grid,"d")
self.dfsearch(i,j-1,grid,"l")
self.dfsearch(i,j+1,grid,"r")
self.path+="e"
Time Complexity
Time: O(m*n)
Space: O(m*n)
Last updated
Was this helpful?