zoukankan      html  css  js  c++  java
  • [LC] 1219. 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:

    • Every time you are located in a cell you will collect all the gold in that cell.
    • From your position you can walk one step to the left, right, up or down.
    • You can't visit the same cell more than once.
    • Never visit a cell with 0 gold.
    • You can start and stop collecting gold from any position in the grid that has some 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.

    class Solution {
        int gRow;
        int gCol;
        int[][] directions = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
        public int getMaximumGold(int[][] grid) {
            gRow = grid.length;
            gCol = grid[0].length;
            int res = 0;
            boolean[][] visited = new boolean[gRow][gCol];
            for (int i = 0; i < gRow; i++) {
                for (int j = 0; j < gCol; j++) {
                    res = Math.max(res, dfs(grid, i, j, visited));
                }
            }
            return res;
        }
        
        private int dfs(int[][] grid, int row, int col, boolean[][] visited) {
            if (row < 0 || row >= gRow || col < 0 || col >= gCol || grid[row][col] == 0 || visited[row][col]) {
                return 0;
            }
            int curValue = grid[row][col];
            int nxtMax = 0;
            // mark as visited
            visited[row][col] = true;
            for (int[] direction: directions) {
                nxtMax = Math.max(nxtMax, dfs(grid, row + direction[0], col + direction[1], visited));
            }
            visited[row][col] = false;
            return curValue + nxtMax;
        }
    }
  • 相关阅读:
    (23)odoo中的domain表达式
    (11)lambda表达式用法
    (22)odoo 安装旧模块报错处理
    (21)odoo中的QWeb模板引擎
    (10)列表操作
    (09)异常处理
    (08)文件与目录
    (07)内存使用和变量赋值
    (06)正则表达式
    vue router路由(三)
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12791216.html
Copyright © 2011-2022 走看看