其他分享
首页 > 其他分享> > LeetCode 1219. Path with Maximum Gold

LeetCode 1219. Path with Maximum Gold

作者:互联网

原题链接在这里:https://leetcode.com/problems/path-with-maximum-gold/

题目:

In a gold mine grid of size m * n, each cell in this mine has an integer representing the amount of gold in that cell, 0 if it is empty.

Return the maximum amount of gold you can collect under the conditions:

Example 1:

Input: grid = [[0,6,0],[5,8,7],[0,9,0]]
Output: 24
Explanation:
[[0,6,0],
 [5,8,7],
 [0,9,0]]
Path to get the maximum gold, 9 -> 8 -> 7.

Example 2:

Input: grid = [[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]
Output: 28
Explanation:
[[1,0,7],
 [2,0,6],
 [3,4,5],
 [0,3,0],
 [9,0,20]]
Path to get the maximum gold, 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7.

Constraints:

题解:

For each cell in the grid, start DFS.

DFS state is current index and current sum. And it should return starting at current index, the maximum glod it could get.

If current index is illegal, return current sum.

Otherwise, accumlate grid[i][j] to sum. And for each direction, do DFS. Get the maximum among 4 directions, and return.

Before return, backtracking grid[i][j] to its original value.

Time Complexity: expontential.

Space: O(m*n). m = grid.length. n = grid[0].length.

AC Java:

 1 class Solution {
 2     int [][] grid;
 3     int m;
 4     int n;
 5     int [][] dirs = new int[][]{{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
 6     
 7     public int getMaximumGold(int[][] grid) {
 8         if(grid == null || grid.length == 0 || grid[0].length == 0){
 9             return 0;
10         }
11         
12         int res = 0;
13         this.grid = grid;
14         this.m = grid.length; 
15         this.n = grid[0].length;
16         for(int i = 0; i<m; i++){
17             for(int j = 0; j<n; j++){
18                 int sum = dfs(i, j, 0);
19                 res = Math.max(res, sum);
20             }
21         }
22         
23         return res;
24     }
25     
26     private int dfs(int i, int j, int sum){
27         if(i<0 || i>=m || j<0 || j>=n || grid[i][j]==0){
28             return sum;
29         }
30         
31         
32         sum += grid[i][j];
33         int temp = grid[i][j];
34         grid[i][j] = 0;
35         
36         int max = 0;
37         for(int [] dir : dirs){
38             int x = i + dir[0];
39             int y = j + dir[1];
40         
41             max = Math.max(max, dfs(x, y, sum));
42         }
43         
44         grid[i][j] = temp;
45         return max;
46     }
47 }

 

标签:return,gold,int,1219,maximum,cell,grid,Path,LeetCode
来源: https://www.cnblogs.com/Dylan-Java-NYC/p/11791324.html