File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ function numIslands ( grid : string [ ] [ ] ) : number {
2
+ const m = grid . length ;
3
+ const n = grid [ 0 ] . length ;
4
+
5
+ const LAND = "1" ;
6
+ const WATER = "0" ;
7
+
8
+ const visited : boolean [ ] [ ] = Array . from ( { length : m } , ( ) => Array ( n ) . fill ( false ) ) ;
9
+
10
+ const isValid = ( row : number , col : number ) : boolean => row >= 0 && row < m && col >= 0 && col < n ;
11
+
12
+ const bfs = ( row : number , col : number ) : void => {
13
+ const directions = [
14
+ [ 0 , 1 ] ,
15
+ [ 0 , - 1 ] ,
16
+ [ 1 , 0 ] ,
17
+ [ - 1 , 0 ] ,
18
+ ] ;
19
+
20
+ // [row, col][]
21
+ const queue : number [ ] [ ] = [ ] ;
22
+
23
+ visited [ row ] [ col ] = true ;
24
+ queue . push ( [ row , col ] ) ;
25
+
26
+ while ( queue . length > 0 ) {
27
+ const [ cx , cy ] = queue . shift ( ) ! ;
28
+
29
+ for ( const [ dx , dy ] of directions ) {
30
+ const [ nx , ny ] = [ cx + dx , cy + dy ] ;
31
+
32
+ if ( isValid ( nx , ny ) && ! visited [ nx ] [ ny ] && grid [ nx ] [ ny ] === LAND ) {
33
+ visited [ nx ] [ ny ] = true ;
34
+ queue . push ( [ nx , ny ] ) ;
35
+ }
36
+ }
37
+ }
38
+ } ;
39
+
40
+ let island = 0 ;
41
+
42
+ for ( let i = 0 ; i < m ; i ++ ) {
43
+ for ( let j = 0 ; j < n ; j ++ ) {
44
+ if ( grid [ i ] [ j ] === LAND && ! visited [ i ] [ j ] ) {
45
+ island ++ ;
46
+ bfs ( i , j ) ;
47
+ }
48
+ }
49
+ }
50
+
51
+ return island ;
52
+ }
You can’t perform that action at this time.
0 commit comments