-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathnumber_of_islands.cpp
47 lines (41 loc) · 1.46 KB
/
number_of_islands.cpp
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
class Solution {
public:
const vector<int> direction = {0, 1, 0, -1, 0}; //improvement instead of performing 4 calls
int dfs(vector<vector<char>>& grid, int i, int j) {
if(i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size() || grid[i][j] == '0') return 0;
grid[i][j] = '0';
for(int k=0; k<4; k++)
dfs(grid, i +
direction[k], j + direction[k + 1]);
return 1;
}
int numIslands(vector<vector<char>>& grid) {
if(grid.size() == 0) return 0;
int islands = 0;
for(int i=0; i<grid.size(); i++) {
for(int j=0; j<grid[0].size(); j++) {
islands += dfs(grid, i, j);
}
}
return islands;
}
};
# class Solution:
# def dfs(self, grid, i , j):
# if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] != '1':
# return
# grid[i][j] = "$"
# self.dfs(grid, i + 1, j)
# self.dfs(grid, i - 1, j)
# self.dfs(grid, i, j + 1)
# self.dfs(grid, i, j - 1)
# def numIslands(self, grid: List[List[str]]) -> int:
# if not grid:
# return 0
# islands = 0
# for i in range(len(grid)):
# for j in range(len(grid[0])):
# if grid[i][j] == '1':
# self.dfs(grid, i, j)
# islands += 1
# return islands