Problem Statement:
Given a 2D grid map of '1's (land) and '0's (water), count the number of islands.
An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically.
✅ Swift Solution Using DFS
func numIslands(_ grid: [[Character]]) -> Int {
if grid.isEmpty { return 0 }
var grid = grid // make a mutable copy
let rows = grid.count
let cols = grid[0].count
var islandCount = 0
func dfs(_ r: Int, _ c: Int) {
if r < 0 || c < 0 || r >= rows || c >= cols || grid[r][c] == "0" {
return
}
grid[r][c] = "0" // mark as visited
dfs(r + 1, c)
dfs(r - 1, c)
dfs(r, c + 1)
dfs(r, c - 1)
}
for r in 0..<rows {
for c in 0..<cols {
if grid[r][c] == "1" {
islandCount += 1
dfs(r, c)
}
}
}
return islandCount
}
// Example usage
let inputGrid: [[Character]] = [
["1","1","0","0","0"],
["1","1","0","0","0"],
["0","0","1","0","0"],
["0","0","0","1","1"]
]
print("Number of islands: \(numIslands(inputGrid))") // Output: 3
🧠 Explanation:
Traverse the grid cell-by-cell.
When a '1' is found, it's the start of an island → increment count.
Use DFS to visit and mark all connected land as '0' (visited).
⏱️ Time Complexity:
O(m × n): Every cell is visited once.
Top comments (0)