Problem
You are given an m x n
binary matrix grid
. 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.
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.
Return the number ofdistinct islands.
Examples
Example 1:
|
|
Example 2:
|
|
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j]
is either0
or1
.
Solution
Method 1 – DFS/BFS with Shape Encoding
Intuition
To count distinct islands, we need to encode the shape of each island in a way that is invariant to translation. The simplest way is to record the relative positions of all cells in an island compared to the starting cell.
Approach
- For each unvisited land cell, start a DFS/BFS and record the path (relative moves or coordinates).
- Store each island’s shape in a set to ensure uniqueness.
- The answer is the size of the set.
Code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(mn)
- 🧺 Space complexity:
O(mn)