@@ -38,3 +38,46 @@ const getMaximumGold = function(grid) {
38
38
}
39
39
40
40
} ;
41
+
42
+ // another
43
+
44
+ /**
45
+ * @param {number[][] } grid
46
+ * @return {number }
47
+ */
48
+ var getMaximumGold = function ( grid ) {
49
+ const m = grid . length
50
+ const n = grid [ 0 ] . length
51
+ let max = 0
52
+
53
+ for ( let i = 0 ; i < m ; i ++ ) {
54
+ for ( let j = 0 ; j < n ; j ++ ) {
55
+ if ( grid [ i ] [ j ] != 0 ) {
56
+ const sum = backtrack ( grid , i , j , m , n )
57
+ max = Math . max ( sum , max )
58
+ }
59
+ }
60
+ }
61
+
62
+ return max
63
+ }
64
+
65
+ function backtrack ( grid , row , col , m , n ) {
66
+ if ( outOfBound ( row , col , m , n ) || grid [ row ] [ col ] === 0 ) return 0
67
+
68
+ let sum = grid [ row ] [ col ]
69
+ grid [ row ] [ col ] = 0 // mark as being visited already
70
+
71
+ const top = backtrack ( grid , row - 1 , col , m , n )
72
+ const right = backtrack ( grid , row , col + 1 , m , n )
73
+ const bot = backtrack ( grid , row + 1 , col , m , n )
74
+ const left = backtrack ( grid , row , col - 1 , m , n )
75
+
76
+ grid [ row ] [ col ] = sum // backtrack to the original form
77
+
78
+ return sum + Math . max ( top , right , bot , left )
79
+ }
80
+
81
+ function outOfBound ( row , col , m , n ) {
82
+ return row < 0 || col < 0 || row >= m || col >= n
83
+ }
0 commit comments