forked from mohitjain/leetcode_solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path200_number_of_islands.rb
More file actions
72 lines (61 loc) · 2.14 KB
/
200_number_of_islands.rb
File metadata and controls
72 lines (61 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Leetcode Problem: https://leetcode.com/problems/number-of-islands/
#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. You may assume all four edges of the grid are all surrounded by water.
#
# Example 1:
#
# Input: grid = [
# ["1","1","1","1","0"],
# ["1","1","0","1","0"],
# ["1","1","0","0","0"],
# ["0","0","0","0","0"]
# ]
# Output: 1
# Example 2:
#
# Input: grid = [
# ["1","1","0","0","0"],
# ["1","1","0","0","0"],
# ["0","0","1","0","0"],
# ["0","0","0","1","1"]
# ]
# Output: 3
# ----------------------------------------------------------------------------------------------------------------------
# @param {Character[][]} grid
# @return {Integer}
def num_islands(grid)
return 0 if grid.nil?
number_of_rows = grid.length
return 0 if number_of_rows.zero?
number_of_columns = grid[0].length
return 0 if number_of_columns.zero?
number_of_islands = 0
number_of_rows.times.each do |row_index|
number_of_columns.times.each do |column_index|
element = grid[row_index][column_index]
next if element == '0'
if element == '1'
number_of_islands += 1
grid = mark_adjacents_as_visited(grid, row_index, column_index)
end
end
end
number_of_islands
end
def mark_adjacents_as_visited(grid, row_index, column_index)
number_of_rows = grid.length
number_of_columns = grid[0].length
if row_index.negative? || row_index >= number_of_rows || column_index.negative? || column_index >= number_of_columns
return grid
end
element = grid[row_index][column_index]
return grid if element == '0'
grid[row_index][column_index] = '0'
grid = mark_adjacents_as_visited(grid, row_index - 1, column_index) #top
grid = mark_adjacents_as_visited(grid, row_index + 1, column_index) #bottom
grid = mark_adjacents_as_visited(grid, row_index, column_index - 1) #Left
grid = mark_adjacents_as_visited(grid, row_index, column_index + 1) #right
grid
end
p num_islands(
[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]
)