22 * @param {number[][] } grid
33 * @return {number }
44 */
5- var minPathSum = function ( grid ) {
6- if ( grid === null || grid . length === 0 || grid [ 0 ] . length === 0 ) {
7- return 0 ;
8- }
5+ // var minPathSum = function(grid) {
6+ // if(grid === null || grid.length === 0 || grid[0].length === 0){
7+ // return 0;
8+ // }
99
10- var dp = [ [ ] ] ;
10+ // var dp = [[]];
1111
12- dp [ 0 ] [ 0 ] = grid [ 0 ] [ 0 ] ;
12+ // dp[0][0] = grid[0][0];
1313
14- for ( var i = 1 ; i < grid . length ; i ++ ) {
15- dp . push ( [ ] ) ;
16- dp [ i ] [ 0 ] = grid [ i ] [ 0 ] + dp [ i - 1 ] [ 0 ] ;
17- }
14+ // for(var i = 1; i < grid.length; i++){
15+ // dp.push([]);
16+ // dp[i][0] = grid[i][0] + dp[i - 1][0];
17+ // }
18+
19+ // for(var j = 1; j < grid[0].length; j++){
20+ // dp[0][j] = grid[0][j] + dp[0][j - 1];
21+ // }
22+
23+ // for(i = 1; i < grid.length; i++){
24+ // for(j = 1; j < grid[i].length; j++){
25+ // var val1 = dp[i - 1][j];
26+ // var val2 = dp[i][j - 1];
27+
28+ // dp[i][j] = Math.min(val1, val2) + grid[i][j];
29+ // }
30+ // }
31+
32+ // return dp[dp.length - 1][dp[0].length - 1];
33+ // }
34+
35+
36+ /**
37+ * @param {number[][] } triangle
38+ * @return {number }
39+ */
40+
41+ // use only O(n) space
42+ var minimumTotal = function ( triangle ) {
43+ var preResult = [ ] ;
44+ var rows = triangle . length ;
1845
19- for ( var j = 1 ; j < grid [ 0 ] . length ; j ++ ) {
20- dp [ 0 ] [ j ] = grid [ 0 ] [ j ] + dp [ 0 ] [ j - 1 ] ;
46+ if ( rows > 0 ) {
47+ preResult . push ( triangle [ 0 ] [ 0 ] ) ;
48+ } else {
49+ return null ;
2150 }
2251
23- for ( i = 1 ; i < grid . length ; i ++ ) {
24- for ( j = 1 ; j < grid [ i ] . length ; j ++ ) {
25- var val1 = dp [ i - 1 ] [ j ] ;
26- var val2 = dp [ i ] [ j - 1 ] ;
52+ for ( var row = 1 ; row < rows ; row ++ ) {
53+ var curResult = [ ] ;
54+
55+ for ( var col = 0 ; col < triangle [ row ] . length ; col ++ ) {
56+ var val ;
2757
28- dp [ i ] [ j ] = Math . min ( val1 , val2 ) + grid [ i ] [ j ] ;
58+ if ( col === 0 ) {
59+ val = preResult [ col ] ;
60+ } else if ( col === ( triangle [ row ] . length - 1 ) ) {
61+ val = preResult [ col - 1 ] ;
62+ } else {
63+ val = Math . min ( preResult [ col - 1 ] , preResult [ col ] ) ;
64+ }
65+
66+ curResult [ col ] = triangle [ row ] [ col ] + val ;
2967 }
68+
69+ preResult = curResult ;
3070 }
3171
32- return dp [ dp . length - 1 ] [ dp [ 0 ] . length - 1 ] ;
33- }
72+ return Math . min . apply ( null , preResult ) ;
73+ } ;
0 commit comments