LeetCode - Blind 75 - Number of Islands
The Problem Given an m x n 2D binary grid grid, which represents a map of '1's (land) and '0's (water), return the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are surrounded by water. Examples Input: grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] Output: 1 Input: grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] Output: 3 Constraints m == grid.length n == grid[i].length 1 <= m, n <= 300 grid[i][j] is '0' or '1'. Depth-First Search Solution func numIslands(_ grid: [[Character]]) -> Int { var grid = grid let ROWS = grid.count let COLS = grid[0].count let directions = [[1, 0], [-1, 0], [0, 1], [0, -1]] var islands = 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" for direction in directions { let dr = direction[0] let dc = direction[1] dfs(r + dr, c + dc) } } for r in 0 ..< ROWS { for c in 0 ..< COLS { if grid[r][c] == "1" { dfs(r, c) islands += 1 } } } return islands } Explanation From the description of the problem, we can see that we have islands formed by connecting adjacent land horizontally or vertically. If we draw a visual representation, we can find islands that are connected vertically or horizontally and surrounded by water. ...