Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2f3d9af

Browse files
add 1219. 黄金矿工
1 parent 35adcbe commit 2f3d9af

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2Nob2NvbGF0ZTE5OTkvY2RuL2ltZy8yMDIwMDgyODE0NTUyMS5qcGc?x-oss-process=image/format,png)
2+
>仰望星空的人,不应该被嘲笑
3+
4+
## 题目描述
5+
6+
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 `m * n` 的网格 `grid` 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 `0`
7+
8+
为了使收益最大化,矿工需要按以下规则来开采黄金:
9+
10+
每当矿工进入一个单元,就会收集该单元格中的所有黄金。
11+
矿工每次可以从当前位置向上下左右四个方向走。
12+
每个单元格只能被开采(进入)一次。
13+
不得开采(进入)黄金数目为 `0` 的单元格。
14+
矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。
15+
16+
示例 1:
17+
18+
```javascript
19+
输入:grid = [[0,6,0],[5,8,7],[0,9,0]]
20+
输出:24
21+
解释:
22+
[[0,6,0],
23+
[5,8,7],
24+
[0,9,0]]
25+
一种收集最多黄金的路线是:9 -> 8 -> 7
26+
```
27+
28+
示例 2:
29+
30+
```javascript
31+
输入:grid = [[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]
32+
输出:28
33+
解释:
34+
[[1,0,7],
35+
[2,0,6],
36+
[3,4,5],
37+
[0,3,0],
38+
[9,0,20]]
39+
一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
40+
```
41+
42+
43+
44+
提示:
45+
46+
```javascript
47+
1 <= grid.length, grid[i].length <= 15
48+
0 <= grid[i][j] <= 100
49+
最多 25 个单元格中有黄金。
50+
```
51+
52+
来源:力扣(LeetCode)
53+
链接:https://leetcode-cn.com/problems/path-with-maximum-gold
54+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
55+
56+
57+
58+
## 解题思路
59+
60+
这题也是搜索相关,四个方向,不允许重复,不过这次我们需要从不同起点搜索,而且为了减少搜索次数,我们得从黄金数量不为0的点开始搜。然后每当走不下去的时候,就比较一下当前黄金数量,求出最大值即可。
61+
62+
```javascript
63+
/**
64+
* @param {number[][]} grid
65+
* @return {number}
66+
*/
67+
var getMaximumGold = function(grid) {
68+
if(!grid || !grid.length) return 0
69+
let vis = []
70+
// 最终收集的最多黄金数量
71+
let maxGold = 0
72+
for(let i=0;i<grid.length;i++) vis[i] = []
73+
// 剪枝条件
74+
let check = (x,y) => {
75+
if(x<0 || x>=grid.length || y<0 || y>=grid[0].length || vis[x][y] === 1 || !grid[x][y]) return false
76+
return true
77+
}
78+
let dfs = (x,y,total) => {
79+
if(check(x,y)){
80+
vis[x][y] = 1 //防止重复
81+
dfs(x+1,y,total+grid[x][y]) // 四个方向搜索
82+
dfs(x,y+1,total+grid[x][y])
83+
dfs(x-1,y,total+grid[x][y])
84+
dfs(x,y-1,total+grid[x][y])
85+
vis[x][y] = 0
86+
}else{
87+
// 走到底了,就比较一下当前黄金数量
88+
maxGold = Math.max(maxGold,total)
89+
}
90+
}
91+
// 起点从非0单元格开始
92+
for(let i=0;i<grid.length;i++){
93+
for(let j=0;j<grid[0].length;j++){
94+
if(grid[i][j]){
95+
dfs(i,j,0)
96+
}
97+
}
98+
}
99+
return maxGold
100+
};
101+
```
102+
103+
104+
## 最后
105+
文章产出不易,还望各位小伙伴们支持一波!
106+
107+
往期精选:
108+
109+
<a href="https://github.com/Chocolate1999/Front-end-learning-to-organize-notes">小狮子前端の笔记仓库</a>
110+
111+
<a href="https://yangchaoyi.vip/">访问超逸の博客</a>,方便小伙伴阅读玩耍~
112+
113+
![](https://img-blog.csdnimg.cn/2020090211491121.png#pic_center)
114+
115+
```javascript
116+
学如逆水行舟,不进则退
117+
```
118+
119+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /