1
+ '''
2
+ Leetcode- https://leetcode.com/problems/number-of-islands/
3
+ '''
4
+
5
+ '''
6
+ 200. Number of Islands
7
+
8
+ Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water),
9
+ return the number of islands.
10
+
11
+ An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically.
12
+ You may assume all four edges of the grid are all surrounded by water.
13
+
14
+ Example 1:
15
+
16
+ Input: grid = [
17
+ ["1","1","0","0","0"],
18
+ ["1","1","0","0","0"],
19
+ ["0","0","1","0","0"],
20
+ ["0","0","0","1","1"]
21
+ ]
22
+ Output: 3
23
+ '''
24
+
25
+ class Solution :
26
+ def numIslands (self , grid : List [List [str ]]) -> int :
27
+ if not grid :
28
+ return 0
29
+ island = 0
30
+ noRows = len (grid )
31
+ noCols = len (grid [0 ])
32
+ for row in range (noRows ):
33
+ for col in range (noCols ):
34
+ if grid [row ][col ] == "1" :
35
+ self .dfs (grid , row , col )
36
+ island += 1
37
+ return island
38
+
39
+ def dfs (self ,grid ,row ,col ):
40
+ if row < 0 or row >= len (grid ) or col < 0 or col >= len (grid [0 ]) or grid [row ][col ]== "0" :
41
+ return
42
+
43
+ grid [row ][col ] = "0"
44
+
45
+ self .dfs (grid ,row - 1 ,col )
46
+ self .dfs (grid ,row + 1 ,col )
47
+ self .dfs (grid ,row ,col - 1 )
48
+ self .dfs (grid ,row ,col + 1 )
49
+
50
+ '''
51
+ Explanation:
52
+
53
+ 1.Initialize island to 0.
54
+ 2.Calculate noRows (number of rows) and noCols (number of columns) of the grid.
55
+ 3.Start looping through each cell in the grid using nested loops.
56
+ 4.For each cell, if the cell contains "1", call the dfs function to explore the island.
57
+ 5.Inside the dfs function, check if the current cell is out of bounds or if it's water ("0"). If either condition is met, return from the function.
58
+ 6.Mark the current cell as visited by changing its value to "0".
59
+ 7.Recursively call dfs on the neighboring cells (up, down, left, right).
60
+ 8.Repeat steps 5-7 until all connected land cells are visited and marked as "0". This essentially explores and marks an entire island.
61
+ 9.Go back to the main function, increment the island count by 1.
62
+ R10.epeat steps 4-9 for all cells in the grid.
63
+
64
+
65
+ Now, let's dry run the code step by step using the provided input grid:
66
+
67
+ 1.Initialize island to 0.
68
+ 2.Calculate noRows = 4 and noCols = 5.
69
+
70
+ Start looping through each cell in the grid:
71
+
72
+ - Cell at (0, 0) contains "1":
73
+
74
+ - Call dfs at (0, 0).
75
+ -- Mark (0, 0) as "0".
76
+ -- Call dfs at (0, -1), which returns immediately.
77
+ -- Call dfs at (0, 1), which recursively calls dfs on (0, 2) and (1, 1), both return immediately.
78
+ -- Call dfs at (-1, 0), which returns immediately.
79
+ -- Call dfs at (1, 0), which recursively calls dfs on (2, 0), which calls dfs on (2, 1), (3, 0), and (1, 0), all return immediately.
80
+ -- Call dfs at (0, 0) again (through recursion), which returns immediately.
81
+ - Increment island to 1.
82
+
83
+ - Cell at (0, 1) contains "1":
84
+
85
+ - Call dfs at (0, 1), which returns immediately.
86
+ - Continue this process for all cells in the grid.
87
+
88
+ Final island count: 3
89
+ '''
0 commit comments