@@ -9,11 +9,9 @@ public class MinPathFinder {
9
9
private int column ;
10
10
11
11
public int minPathSum (int [][] grid ) {
12
- if (grid == null || grid .length == 0 )
13
- return 0 ;
12
+ if (grid == null || grid .length == 0 ) return 0 ;
14
13
15
- if (grid .length == 1 && grid [0 ].length == 1 )
16
- return grid [0 ][0 ];
14
+ if (grid .length == 1 && grid [0 ].length == 1 ) return grid [0 ][0 ];
17
15
18
16
// m
19
17
row = grid .length ;
@@ -22,38 +20,36 @@ public int minPathSum(int[][] grid) {
22
20
23
21
marks = new int [row ][column ];
24
22
25
- int minSum = calcMinSum (grid , row - 1 , column - 1 );
26
- return minSum ;
23
+ return calcMinSum (grid , row - 1 , column - 1 );
27
24
}
28
25
29
26
private int calcMinSum (int [][] grid , int row , int column ) {
30
27
if (row < 0 || column < 0 ) {
31
- return 0 ;
28
+ return - 1 ; // non-negative values for each cell
32
29
}
33
30
34
31
if (marks [row ][column ] != 0 ) {
35
32
return marks [row ][column ];
36
33
}
37
34
38
- int sumMin = grid [row ][column ];
39
- if (row == 0 || column == 0 ) {
40
- if (row == 0 && column == 0 ) {
41
- return grid [0 ][0 ];
42
- }
43
-
44
- if (row == 0 ) {
45
- return sumMin + calcMinSum (grid , row , column - 1 );
46
- } else {
47
- // column == 0
48
- return sumMin + calcMinSum (grid , row - 1 , column );
49
- }
50
-
35
+ if (row == 0 && column == 0 ) {
36
+ return grid [0 ][0 ];
51
37
}
52
38
39
+ int sumMin = grid [row ][column ];
40
+
53
41
int topResult = calcMinSum (grid , row - 1 , column );
54
42
int leftResult = calcMinSum (grid , row , column - 1 );
55
43
56
- int sum = sumMin + Math .min (leftResult , topResult );
44
+ int subMin ;
45
+ if (topResult >= 0 && leftResult >= 0 ) {
46
+ // Calling method Math.min() takes extra time!
47
+ subMin = leftResult < topResult ? leftResult : topResult ;
48
+ } else {
49
+ subMin = topResult < 0 ? leftResult : topResult ;
50
+ }
51
+
52
+ int sum = sumMin + subMin ;
57
53
58
54
marks [row ][column ] = sum ;
59
55
return sum ;
0 commit comments