Skip to content

Commit c390a11

Browse files
committed
feat: add number of islands in rs
1 parent a5c1c17 commit c390a11

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

src/medium/number_of_islands.rs

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#![allow(dead_code)]
2+
pub fn num_islands(grid: &mut Vec<Vec<char>>) -> i32 {
3+
if grid.is_empty() {
4+
return 0;
5+
}
6+
7+
let rows = grid.len();
8+
let cols = grid[0].len();
9+
let mut islands = 0;
10+
11+
fn dfs(grid: &mut Vec<Vec<char>>, i: usize, j: usize) {
12+
let rows = grid.len();
13+
let cols = grid[0].len();
14+
15+
if i >= rows || j >= cols || grid[i][j] == '0' {
16+
return;
17+
}
18+
19+
grid[i][j] = '0';
20+
21+
if i > 0 {
22+
dfs(grid, i - 1, j);
23+
}
24+
if j > 0 {
25+
dfs(grid, i, j - 1);
26+
}
27+
dfs(grid, i + 1, j);
28+
dfs(grid, i, j + 1);
29+
}
30+
31+
for i in 0..rows {
32+
for j in 0..cols {
33+
if grid[i][j] == '1' {
34+
islands += 1;
35+
dfs(grid, i, j);
36+
}
37+
}
38+
}
39+
40+
islands
41+
}
42+
43+
#[cfg(test)]
44+
mod tests {
45+
use super::*;
46+
47+
#[test]
48+
fn test_num_islands() {
49+
assert_eq!(
50+
num_islands(&mut vec![
51+
vec!['1', '1', '1', '1', '0'],
52+
vec!['1', '1', '0', '1', '0'],
53+
vec!['1', '1', '0', '0', '0'],
54+
vec!['0', '0', '0', '0', '0']
55+
]),
56+
1
57+
);
58+
assert_eq!(
59+
num_islands(&mut vec![
60+
vec!['1', '1', '0', '0', '0'],
61+
vec!['1', '1', '0', '0', '0'],
62+
vec!['0', '0', '1', '0', '0'],
63+
vec!['0', '0', '0', '1', '1']
64+
]),
65+
3
66+
);
67+
}
68+
}

0 commit comments

Comments
 (0)