首页 > 其他分享 >力扣 - 1219. 黄金矿工

力扣 - 1219. 黄金矿工

时间:2023-01-21 14:22:25浏览次数:49  
标签:dps int 1219 力扣 newX newY grid 黄金矿工 capValue

思路 :  

          本题要找到获取到 黄金的最大价值,也就是找到一条 连续的每一个节点不为0的路径相加和的最大值。

        那需要解决两个问题: 

                 1、如何确定 起始点  ->  把每一个位置 都当作起始点 

                 2、每一步如何进行移动 ->   主要移动有 上下左右 四个方向。通过回溯、递归的方式 找到一个最大值。

          

// 此位置 方向 目录 
var dirs = []struct{x, y int}{{-1, 0}, {1, 0}, {0, 1}, {0, -1}} func getMaximumGold(grid [][]int) (res int) { if len(grid) == 0 { return } // 如何找到 最优的路线 // 如何找到 起始点 -> 类似于 这种 如果有多个起点 那就是 回溯的方式 var dps func(x, y, capValue int) dps = func(x, y, capValue int) {           
// 每一个递归都进行 相加 判断 是否大于 全部变量 进行赋值即可 capValue += grid[x][y] if capValue > res { res = capValue } // 防止递归遍历在 不为0的路上 所以需要进行 记录原始值 originValue := grid[x][y]
// 将当前 走的位置 设置为 0 grid[x][y] = 0 // 循环上下左右 四个方向 for _, dir := range dirs { // 在原始的左边进行相加 newX, newY := x + dir.x, y + dir.y if newX >= 0 && newX < len(grid) && newY >= 0 && newY < len(grid[newX]) && grid[newX][newY] > 0 { dps(newX, newY, capValue) } }
// 在进行完成此条路径之后 将每一个位置的数字进行还原 进行下次递归 grid[x][y] = originValue } for i:=0;i<len(grid);i++{ for j:=0;j<len(grid[i]);j++{ if grid[i][j] > 0 { dps(i, j, 0) } } } return }

标签:dps,int,1219,力扣,newX,newY,grid,黄金矿工,capValue
From: https://www.cnblogs.com/zhaoxianxin/p/17063772.html

相关文章

  • 力扣每日一题2023.1.20---1817. 查找用户活跃分钟数
    给你用户在LeetCode的操作日志,和一个整数k。日志用一个二维整数数组logs表示,其中每个logs[i]=[IDi,timei]表示ID为IDi的用户在timei分钟时执行了某个操作......
  • 力扣每日一题2023.1.19---2299. 强密码检验器 II
    如果一个密码满足以下所有条件,我们称它是一个强 密码:   它有至少8 个字符。   至少包含一个小写英文 字母。   至少包含一个大写英文 字母。   至......
  • 力扣---1561. 你可以获得的最大硬币数目
    有3n堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币:   每一轮中,你将会选出任意3堆硬币(不一定连续)。   Alice将会取走硬币数量最多的那一堆。   你......
  • 力扣---2348. 全 0 子数组的数目
    给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。子数组 是一个数组中一段连续非空元素组成的序列。示例1:输入:nums=[1,3,0,0,2,0,0,4]输出:6解释:子数组[0]......
  • 力扣每日一题2023.1.17---1814. 统计一个数组中好对子的数目
    给你一个数组 nums ,数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。比方说 rev(123)=321 , rev(120)=21 。我们称满足下面条......
  • 力扣每日一题2023.1.16---1813. 句子相似性 III
    一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,"HelloWorld" ,"HELLO" ,"helloworldhelloworld" 都是句子。每个单词都只 ......
  • 力扣22.括号生成
    力扣22.括号生成-力扣(Leetcode)1.第一种,暴力dfs枚举+判断 i.用dfs枚举出所有序列,然后判断合法括号序列1classSolution{2public:3boolisLegal(stri......
  • 力扣每日一题2023.1.12---1807. 替换字符串中的括号内容
    给你一个字符串 s ,它包含一些括号对,每个括号中包含一个非空 的键。   比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 "name"和 "age"......
  • 力扣 373. 查找和最小的 K 对数字 [堆]
    373.查找和最小的K对数字给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素......
  • 力扣11. 盛最多水的容器(贪心)
    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可......