1
+ function minPathSum ( grid : number [ ] [ ] ) : number {
2
+ const pathCache : number [ ] [ ] = [ ] ;
3
+
4
+ function calculate ( m :number , n :number ) : number {
5
+ if ( m === 0 && n === 0 ) {
6
+ return pathCache [ 0 ] [ 0 ] ;
7
+ }
8
+
9
+ if ( m === 0 ) {
10
+ pathCache [ m ] [ n ] = ( ! ! pathCache [ m ] [ n - 1 ] ? pathCache [ m ] [ n - 1 ] : calculate ( m , n - 1 ) ) + grid [ m ] [ n ] ;
11
+ } else if ( n === 0 ) {
12
+ pathCache [ m ] [ n ] = ( ! ! pathCache [ m - 1 ] [ n ] ? pathCache [ m - 1 ] [ n ] : calculate ( m - 1 , n ) ) + grid [ m ] [ n ] ;
13
+ } else {
14
+ pathCache [ m ] [ n ] = Math . min (
15
+ ( ! ! pathCache [ m - 1 ] [ n ] ? pathCache [ m - 1 ] [ n ] : calculate ( m - 1 , n ) ) + grid [ m ] [ n ] ,
16
+ ( ! ! pathCache [ m ] [ n - 1 ] ? pathCache [ m ] [ n - 1 ] : calculate ( m , n - 1 ) ) + grid [ m ] [ n ] ,
17
+ )
18
+ }
19
+
20
+ return pathCache [ m ] [ n ] ;
21
+ }
22
+
23
+ const rowLength = grid . length ;
24
+ const columnLength = grid [ 0 ] ?. length ;
25
+
26
+ for ( let i = 0 ; i < rowLength ; i ++ ) {
27
+ pathCache . push ( [ ] ) ;
28
+ for ( let j = 0 ; j < columnLength ; j ++ ) {
29
+ pathCache [ i ] . push ( 0 ) ;
30
+ }
31
+ }
32
+ pathCache [ 0 ] [ 0 ] = grid [ 0 ] [ 0 ] ;
33
+
34
+ if ( ! rowLength || ! columnLength ) {
35
+ return 0 ;
36
+ }
37
+
38
+ return calculate ( rowLength - 1 , columnLength - 1 ) ;
39
+ } ;
0 commit comments