Skip to content

Commit 0f3d739

Browse files
committed
Add problem 200 - Number Of Islands
1 parent 5330307 commit 0f3d739

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

problems/dfs/number_of_islands.go

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dfs
2+
3+
func NumberOfIslands(grid [][]byte) int {
4+
// Special case
5+
if len(grid) == 0 {
6+
return 0
7+
}
8+
// Dimensions of the grid
9+
m, n := len(grid), len(grid[0])
10+
// Total number of islands
11+
count := 0
12+
// Process every cell in the grid
13+
for i := 0; i < m; i++ {
14+
for j := 0; j < n; j++ {
15+
if grid[i][j] == '1' {
16+
dfs(grid, i, j, m, n)
17+
count++
18+
}
19+
}
20+
}
21+
return count
22+
}
23+
24+
func dfs(grid [][]byte, i int, j int, m int, n int) {
25+
// Base case
26+
if i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0' {
27+
return
28+
}
29+
grid[i][j] = '0'
30+
dfs(grid, i-1, j, m, n)
31+
dfs(grid, i+1, j, m, n)
32+
dfs(grid, i, j-1, m, n)
33+
dfs(grid, i, j+1, m, n)
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package dfs_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/anirudhology/leetcode-go/problems/dfs"
7+
)
8+
9+
func TestNumIslands_EmptyGrid(t *testing.T) {
10+
grid := [][]byte{}
11+
if res := dfs.NumberOfIslands(grid); res != 0 {
12+
t.Errorf("expected 0, got %d", res)
13+
}
14+
}
15+
16+
func TestNumIslands_NullGrid(t *testing.T) {
17+
var grid [][]byte
18+
if res := dfs.NumberOfIslands(grid); res != 0 {
19+
t.Errorf("expected 0, got %d", res)
20+
}
21+
}
22+
23+
func TestNumIslands_SingleIsland(t *testing.T) {
24+
grid := [][]byte{
25+
{'1', '1', '0', '0'},
26+
{'1', '1', '0', '0'},
27+
{'0', '0', '0', '0'},
28+
{'0', '0', '0', '0'},
29+
}
30+
if res := dfs.NumberOfIslands(grid); res != 1 {
31+
t.Errorf("expected 1, got %d", res)
32+
}
33+
}
34+
35+
func TestNumIslands_MultipleIslands(t *testing.T) {
36+
grid := [][]byte{
37+
{'1', '1', '0', '0', '1'},
38+
{'1', '0', '0', '1', '1'},
39+
{'0', '0', '1', '0', '0'},
40+
{'1', '0', '0', '1', '1'},
41+
}
42+
if res := dfs.NumberOfIslands(grid); res != 5 {
43+
t.Errorf("expected 5, got %d", res)
44+
}
45+
}
46+
47+
func TestNumIslands_NoIslands(t *testing.T) {
48+
grid := [][]byte{
49+
{'0', '0', '0', '0'},
50+
{'0', '0', '0', '0'},
51+
}
52+
if res := dfs.NumberOfIslands(grid); res != 0 {
53+
t.Errorf("expected 0, got %d", res)
54+
}
55+
}
56+
57+
func TestNumIslands_MixedGrid(t *testing.T) {
58+
grid := [][]byte{
59+
{'1', '0', '1', '0'},
60+
{'0', '1', '0', '1'},
61+
{'1', '0', '1', '0'},
62+
}
63+
if res := dfs.NumberOfIslands(grid); res != 6 {
64+
t.Errorf("expected 6, got %d", res)
65+
}
66+
}

0 commit comments

Comments
 (0)