Medium
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:
0
gold.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:
m == grid.length
n == grid[i].length
1 <= m, n <= 15
0 <= grid[i][j] <= 100
class Solution {
private var maxGold = 0
fun getMaximumGold(grid: Array<IntArray>): Int {
for (i in grid.indices) {
for (j in grid[0].indices) {
if (grid[i][j] != 0) {
val g = grid[i][j]
grid[i][j] = 0
gold(grid, i, j, g)
grid[i][j] = g
}
}
}
return maxGold
}
private fun gold(grid: Array<IntArray>, row: Int, col: Int, gold: Int) {
if (gold > maxGold) {
maxGold = gold
}
if (row > 0 && grid[row - 1][col] != 0) {
val 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) {
val 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.size - 1 && grid[row + 1][col] != 0) {
// flag=false;
val 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].size - 1 && grid[row][col + 1] != 0) {
val currGold = grid[row][col + 1]
grid[row][col + 1] = 0
gold(grid, row, col + 1, gold + currGold)
grid[row][col + 1] = currGold
}
}
}