File tree 9 files changed +190
-0
lines changed
9 files changed +190
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int minPathSum (vector<vector<int >>& grid) {
4
+ int n = grid.size ();
5
+ int m = grid[0 ].size ();
6
+
7
+ // dp grid f
8
+ vector<vector<int >> f (n, vector<int >(m, 0 ));
9
+ f[0 ][0 ] = grid[0 ][0 ];
10
+ for (int j = 1 ; j < m; j++)
11
+ f[0 ][j] = f[0 ][j - 1 ] + grid[0 ][j];
12
+ for (int i = 1 ; i < n; i++)
13
+ f[i][0 ] = f[i - 1 ][0 ] + grid[i][0 ];
14
+
15
+ // work
16
+ // f[i][j] = min cost to reach cell(i,j) from 0,0
17
+ for (int i = 1 ; i < n; i++) {
18
+ for (int j = 1 ; j < m; j++) {
19
+ f[i][j] = min (f[i - 1 ][j], f[i][j - 1 ]) + grid[i][j];
20
+ }
21
+ }
22
+
23
+ return f[n - 1 ][m - 1 ];
24
+
25
+ }
26
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int minPathSum (int [][] grid ) {
3
+ int n = grid .length ;
4
+ int m = grid [0 ].length ;
5
+
6
+ int [][] f = new int [n ][m ];
7
+ f [0 ][0 ] = grid [0 ][0 ];
8
+ for (int j = 1 ; j < m ; j ++)
9
+ f [0 ][j ] = f [0 ][j - 1 ] + grid [0 ][j ];
10
+ for (int i = 1 ; i < n ; i ++)
11
+ f [i ][0 ] = f [i - 1 ][0 ] + grid [i ][0 ];
12
+
13
+ for (int i = 1 ; i < n ; i ++) {
14
+ for (int j = 1 ; j < m ; j ++) {
15
+ f [i ][j ] = Math .min (f [i - 1 ][j ], f [i ][j - 1 ]) + grid [i ][j ];
16
+ }
17
+ }
18
+
19
+ return f [n - 1 ][m - 1 ];
20
+
21
+ }
22
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def minPathSum (self , grid : List [List [int ]]) -> int :
3
+ n = len (grid )
4
+ m = len (grid [0 ])
5
+ f = [[None for _ in range (m )] for _ in range (n )]
6
+
7
+ f [0 ][0 ] = grid [0 ][0 ]
8
+ for j in range (1 , m ):
9
+ f [0 ][j ] = f [0 ][j - 1 ] + grid [0 ][j ]
10
+ for i in range (1 , n ):
11
+ f [i ][0 ] = f [i - 1 ][0 ] + grid [i ][0 ]
12
+
13
+ for i in range (1 , n ):
14
+ for j in range (1 , m ):
15
+ f [i ][j ] = min (f [i - 1 ][j ] , f [i ][j - 1 ]) + grid [i ][j ]
16
+
17
+ return f [n - 1 ][m - 1 ]
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int minCostClimbingStairs (vector<int >& cost) {
4
+ int n = cost.size ();
5
+ vector<int > f (n + 1 );
6
+ f[0 ] = 0 ;
7
+ f[1 ] = 0 ;
8
+
9
+ for (int i = 2 ; i <= n; i++) {
10
+ f[i] = min (f[i - 1 ] + cost[i - 1 ], f[i - 2 ] + cost[i - 2 ]);
11
+ }
12
+
13
+ return f[n];
14
+ }
15
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int minCostClimbingStairs (int [] cost ) {
3
+ int n = cost .length ;
4
+ int f [] = new int [n + 1 ];
5
+ f [0 ] = 0 ;
6
+ f [1 ] = 0 ;
7
+
8
+ for (int i = 2 ; i <= n ; i ++) {
9
+ f [i ] = Math .min (f [i - 1 ] + cost [i - 1 ], f [i - 2 ] + cost [i - 2 ]);
10
+ }
11
+
12
+ return f [n ];
13
+ }
14
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def minCostClimbingStairs (self , cost : List [int ]) -> int :
3
+ n = len (cost )
4
+ f = [None ] * (n + 1 )
5
+
6
+ f [0 ] = 0
7
+ f [1 ] = 0
8
+
9
+ for i in range (2 , n + 1 ):
10
+ f [i ] = min (f [i - 1 ] + cost [i - 1 ], f [i - 2 ] + cost [i - 2 ])
11
+ return f [n ]
12
+
13
+
14
+
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int minFallingPathSum (vector<vector<int >>& A) {
4
+ int n = A.size ();
5
+ int m = A[0 ].size ();
6
+
7
+ vector<vector<int >> f (n, vector<int >(m, 0 ));
8
+
9
+ for (int i = 0 ; i < n; i++) {
10
+ for (int j = 0 ; j < m; j++) {
11
+ if (i == 0 )
12
+ f[i][j] = A[i][j];
13
+ else {
14
+ int val = f[i - 1 ][j];
15
+ for (int k = j - 1 ; k <= j + 1 ; k++)
16
+ if (k >= 0 and k < m)
17
+ val = min (val, f[i - 1 ][k]);
18
+
19
+ f[i][j] = val + A[i][j];
20
+ }
21
+ }
22
+ }
23
+
24
+ int ans = INT_MAX;
25
+ for (int j = 0 ; j < m; j++)
26
+ ans = min (ans, f[n - 1 ][j]);
27
+
28
+ return ans;
29
+ }
30
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int minFallingPathSum (int [][] A ) {
3
+ int n = A .length ;
4
+ int m = A [0 ].length ;
5
+
6
+ // vector<vector<int>> f(n, vector<int>(m, 0));
7
+ int [][] f = new int [n ][m ];
8
+
9
+ for (int i = 0 ; i < n ; i ++) {
10
+ for (int j = 0 ; j < m ; j ++) {
11
+ if (i == 0 )
12
+ f [i ][j ] = A [i ][j ];
13
+ else {
14
+ int val = f [i - 1 ][j ];
15
+ for (int k = j - 1 ; k <= j + 1 ; k ++)
16
+ if (k >= 0 && k < m )
17
+ val = Math .min (val , f [i - 1 ][k ]);
18
+
19
+ f [i ][j ] = val + A [i ][j ];
20
+ }
21
+ }
22
+ }
23
+
24
+ int ans = Integer .MAX_VALUE ;
25
+ for (int j = 0 ; j < m ; j ++)
26
+ ans = Math .min (ans , f [n - 1 ][j ]);
27
+
28
+ return ans ;
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def minFallingPathSum (self , A : List [List [int ]]) -> int :
3
+ n = len (A )
4
+ m = len (A [0 ])
5
+
6
+ f = [[None for _ in range (m )] for _ in range (n )]
7
+
8
+ for i in range (n ):
9
+ for j in range (m ):
10
+ if i == 0 :
11
+ f [i ][j ] = A [i ][j ]
12
+ else :
13
+ val = f [i - 1 ][j ]
14
+ for k in [j - 1 ,j ,j + 1 ]:
15
+ if k >= 0 and k < m :
16
+ val = min (val , f [i - 1 ][k ])
17
+ f [i ][j ] = val + A [i ][j ]
18
+
19
+ ans = float ('inf' )
20
+ for j in range (m ):
21
+ ans = min (ans , f [n - 1 ][j ])
22
+ return ans
You can’t perform that action at this time.
0 commit comments