1219. Path with Maximum Gold

Difficulty:
Related Topics:
Similar Questions:

    Problem

    In a gold mine grid of size m x 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:

    Solution (Java)

    class Solution {
        private int maxGold = 0;
    
        public int getMaximumGold(int[][] grid) {
            for (int i = 0; i < grid.length; i++) {
                for (int j = 0; j < grid[0].length; j++) {
                    if (grid[i][j] != 0) {
                        int g = grid[i][j];
                        grid[i][j] = 0;
                        gold(grid, i, j, g);
                        grid[i][j] = g;
                    }
                }
            }
            return maxGold;
        }
    
        private void gold(int[][] grid, int row, int col, int gold) {
            if (gold > maxGold) {
                maxGold = gold;
            }
            if (row > 0 && grid[row - 1][col] != 0) {
                int currGold = grid[row - 1][col];
                grid[row - 1][col] = 0;
                gold(grid, row - 1, col, gold + currGold);
                grid[row - 1][col] = currGold;
            }
            if (col > 0 && grid[row][col - 1] != 0) {
                int currGold = grid[row][col - 1];
                grid[row][col - 1] = 0;
                gold(grid, row, col - 1, gold + currGold);
                grid[row][col - 1] = currGold;
            }
            if (row < grid.length - 1 && grid[row + 1][col] != 0) {
                // flag=false;
                int currGold = grid[row + 1][col];
                grid[row + 1][col] = 0;
                gold(grid, row + 1, col, gold + currGold);
                grid[row + 1][col] = currGold;
            }
            if (col < grid[0].length - 1 && grid[row][col + 1] != 0) {
                int currGold = grid[row][col + 1];
                grid[row][col + 1] = 0;
                gold(grid, row, col + 1, gold + currGold);
                grid[row][col + 1] = currGold;
            }
        }
    }
    

    Explain:

    nope.

    Complexity: