Skip to content

Commit 4c9533c

Browse files
committed
feat: add solutions to lc problem: No.1219
No.1219.Path with Maximum Gold
1 parent 9531bfb commit 4c9533c

File tree

9 files changed

+495
-405
lines changed

9 files changed

+495
-405
lines changed

README.md

+167-167
Large diffs are not rendered by default.

README_EN.md

+159-159
Large diffs are not rendered by default.

solution/1200-1299/1219.Path with Maximum Gold/README.md

+60-27
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61-
DFS。
61+
枚举每个单元格作为起点,进行 DFS 搜索,找到收益最大的一条路径。
62+
63+
由于每个单元格只能被开采一次,因此当搜索到单元格 `(i, j)` 时,可以将 `grid[i][j]` 置为 0,搜索结束后再恢复 `grid[i][j]` 为原来的值。
6264

6365
<!-- tabs:start -->
6466

@@ -70,22 +72,17 @@ DFS。
7072
class Solution:
7173
def getMaximumGold(self, grid: List[List[int]]) -> int:
7274
def dfs(i, j):
73-
if not (0 <= i < m and 0 <= j < n and grid[i][j]):
75+
if not(0 <= i < m and 0 <= j < n and grid[i][j]):
7476
return 0
7577
t = grid[i][j]
7678
grid[i][j] = 0
77-
res = 0
78-
for a, b in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
79-
res = max(res, t + dfs(i + a, j + b))
79+
ans = t + max(dfs(i + a, j + b)
80+
for a, b in [[0, 1], [0, -1], [-1, 0], [1, 0]])
8081
grid[i][j] = t
81-
return res
82+
return ans
8283

8384
m, n = len(grid), len(grid[0])
84-
ans = 0
85-
for i in range(m):
86-
for j in range(n):
87-
ans = max(ans, dfs(i, j))
88-
return ans
85+
return max(dfs(i, j) for i in range(m) for j in range(n))
8986
```
9087

9188
### **Java**
@@ -95,31 +92,35 @@ class Solution:
9592
```java
9693
class Solution {
9794
private int[][] grid;
95+
private int m;
96+
private int n;
9897

9998
public int getMaximumGold(int[][] grid) {
99+
m = grid.length;
100+
n = grid[0].length;
100101
this.grid = grid;
101102
int ans = 0;
102-
for (int i = 0; i < grid.length; ++i) {
103-
for (int j = 0; j < grid[0].length; ++j) {
103+
for (int i = 0; i < m; ++i) {
104+
for (int j = 0; j < n; ++j) {
104105
ans = Math.max(ans, dfs(i, j));
105106
}
106107
}
107108
return ans;
108109
}
109110

110111
private int dfs(int i, int j) {
111-
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) {
112+
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == 0) {
112113
return 0;
113114
}
114115
int t = grid[i][j];
115116
grid[i][j] = 0;
116117
int[] dirs = {-1, 0, 1, 0, -1};
117-
int res = 0;
118+
int ans = 0;
118119
for (int k = 0; k < 4; ++k) {
119-
res = Math.max(res, t + dfs(i + dirs[k], j + dirs[k + 1]));
120+
ans = Math.max(ans, t + dfs(i + dirs[k], j + dirs[k + 1]));
120121
}
121122
grid[i][j] = t;
122-
return res;
123+
return ans;
123124
}
124125
}
125126
```
@@ -129,26 +130,24 @@ class Solution {
129130
```cpp
130131
class Solution {
131132
public:
132-
vector<vector<int>> grid;
133133
vector<int> dirs = {-1, 0, 1, 0, -1};
134134

135135
int getMaximumGold(vector<vector<int>>& grid) {
136-
this->grid = grid;
137136
int ans = 0;
138137
for (int i = 0; i < grid.size(); ++i)
139138
for (int j = 0; j < grid[0].size(); ++j)
140-
ans = max(ans, dfs(i, j));
139+
ans = max(ans, dfs(i, j, grid));
141140
return ans;
142141
}
143142

144-
int dfs(int i, int j) {
143+
int dfs(int i, int j, vector<vector<int>>& grid) {
145144
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == 0) return 0;
146145
int t = grid[i][j];
147146
grid[i][j] = 0;
148-
int res = 0;
149-
for (int k = 0; k < 4; ++k) res = max(res, t + dfs(i + dirs[k], j + dirs[k + 1]));
147+
int ans = 0;
148+
for (int k = 0; k < 4; ++k) ans = max(ans, t + dfs(i + dirs[k], j + dirs[k + 1], grid));
150149
grid[i][j] = t;
151-
return res;
150+
return ans;
152151
}
153152
};
154153
```
@@ -165,13 +164,13 @@ func getMaximumGold(grid [][]int) int {
165164
}
166165
t := grid[i][j]
167166
grid[i][j] = 0
168-
res := 0
167+
ans := 0
169168
dirs := []int{-1, 0, 1, 0, -1}
170169
for k := 0; k < 4; k++ {
171-
res = max(res, t+dfs(i+dirs[k], j+dirs[k+1]))
170+
ans = max(ans, t+dfs(i+dirs[k], j+dirs[k+1]))
172171
}
173172
grid[i][j] = t
174-
return res
173+
return ans
175174
}
176175
ans := 0
177176
for i := 0; i < m; i++ {
@@ -190,6 +189,40 @@ func max(a, b int) int {
190189
}
191190
```
192191

192+
### **JavaScript**
193+
194+
```js
195+
/**
196+
* @param {number[][]} grid
197+
* @return {number}
198+
*/
199+
var getMaximumGold = function (grid) {
200+
const m = grid.length;
201+
const n = grid[0].length;
202+
function dfs(i, j) {
203+
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == 0) {
204+
return 0;
205+
}
206+
const t = grid[i][j];
207+
grid[i][j] = 0;
208+
let ans = 0;
209+
const dirs = [-1, 0, 1, 0, -1];
210+
for (let k = 0; k < 4; ++k) {
211+
ans = Math.max(ans, t + dfs(i + dirs[k], j + dirs[k + 1]));
212+
}
213+
grid[i][j] = t;
214+
return ans;
215+
}
216+
let ans = 0;
217+
for (let i = 0; i < m; ++i) {
218+
for (let j = 0; j < n; ++j) {
219+
ans = Math.max(ans, dfs(i, j));
220+
}
221+
}
222+
return ans;
223+
};
224+
```
225+
193226
### **...**
194227

195228
```

solution/1200-1299/1219.Path with Maximum Gold/README_EN.md

+57-26
Original file line numberDiff line numberDiff line change
@@ -66,54 +66,53 @@ DFS.
6666
class Solution:
6767
def getMaximumGold(self, grid: List[List[int]]) -> int:
6868
def dfs(i, j):
69-
if not (0 <= i < m and 0 <= j < n and grid[i][j]):
69+
if not(0 <= i < m and 0 <= j < n and grid[i][j]):
7070
return 0
7171
t = grid[i][j]
7272
grid[i][j] = 0
73-
res = 0
74-
for a, b in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
75-
res = max(res, t + dfs(i + a, j + b))
73+
ans = t + max(dfs(i + a, j + b)
74+
for a, b in [[0, 1], [0, -1], [-1, 0], [1, 0]])
7675
grid[i][j] = t
77-
return res
76+
return ans
7877

7978
m, n = len(grid), len(grid[0])
80-
ans = 0
81-
for i in range(m):
82-
for j in range(n):
83-
ans = max(ans, dfs(i, j))
84-
return ans
79+
return max(dfs(i, j) for i in range(m) for j in range(n))
8580
```
8681

8782
### **Java**
8883

8984
```java
9085
class Solution {
9186
private int[][] grid;
87+
private int m;
88+
private int n;
9289

9390
public int getMaximumGold(int[][] grid) {
91+
m = grid.length;
92+
n = grid[0].length;
9493
this.grid = grid;
9594
int ans = 0;
96-
for (int i = 0; i < grid.length; ++i) {
97-
for (int j = 0; j < grid[0].length; ++j) {
95+
for (int i = 0; i < m; ++i) {
96+
for (int j = 0; j < n; ++j) {
9897
ans = Math.max(ans, dfs(i, j));
9998
}
10099
}
101100
return ans;
102101
}
103102

104103
private int dfs(int i, int j) {
105-
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) {
104+
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == 0) {
106105
return 0;
107106
}
108107
int t = grid[i][j];
109108
grid[i][j] = 0;
110109
int[] dirs = {-1, 0, 1, 0, -1};
111-
int res = 0;
110+
int ans = 0;
112111
for (int k = 0; k < 4; ++k) {
113-
res = Math.max(res, t + dfs(i + dirs[k], j + dirs[k + 1]));
112+
ans = Math.max(ans, t + dfs(i + dirs[k], j + dirs[k + 1]));
114113
}
115114
grid[i][j] = t;
116-
return res;
115+
return ans;
117116
}
118117
}
119118
```
@@ -123,26 +122,24 @@ class Solution {
123122
```cpp
124123
class Solution {
125124
public:
126-
vector<vector<int>> grid;
127125
vector<int> dirs = {-1, 0, 1, 0, -1};
128126

129127
int getMaximumGold(vector<vector<int>>& grid) {
130-
this->grid = grid;
131128
int ans = 0;
132129
for (int i = 0; i < grid.size(); ++i)
133130
for (int j = 0; j < grid[0].size(); ++j)
134-
ans = max(ans, dfs(i, j));
131+
ans = max(ans, dfs(i, j, grid));
135132
return ans;
136133
}
137134

138-
int dfs(int i, int j) {
135+
int dfs(int i, int j, vector<vector<int>>& grid) {
139136
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == 0) return 0;
140137
int t = grid[i][j];
141138
grid[i][j] = 0;
142-
int res = 0;
143-
for (int k = 0; k < 4; ++k) res = max(res, t + dfs(i + dirs[k], j + dirs[k + 1]));
139+
int ans = 0;
140+
for (int k = 0; k < 4; ++k) ans = max(ans, t + dfs(i + dirs[k], j + dirs[k + 1], grid));
144141
grid[i][j] = t;
145-
return res;
142+
return ans;
146143
}
147144
};
148145
```
@@ -159,13 +156,13 @@ func getMaximumGold(grid [][]int) int {
159156
}
160157
t := grid[i][j]
161158
grid[i][j] = 0
162-
res := 0
159+
ans := 0
163160
dirs := []int{-1, 0, 1, 0, -1}
164161
for k := 0; k < 4; k++ {
165-
res = max(res, t+dfs(i+dirs[k], j+dirs[k+1]))
162+
ans = max(ans, t+dfs(i+dirs[k], j+dirs[k+1]))
166163
}
167164
grid[i][j] = t
168-
return res
165+
return ans
169166
}
170167
ans := 0
171168
for i := 0; i < m; i++ {
@@ -184,6 +181,40 @@ func max(a, b int) int {
184181
}
185182
```
186183

184+
### **JavaScript**
185+
186+
```js
187+
/**
188+
* @param {number[][]} grid
189+
* @return {number}
190+
*/
191+
var getMaximumGold = function (grid) {
192+
const m = grid.length;
193+
const n = grid[0].length;
194+
function dfs(i, j) {
195+
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == 0) {
196+
return 0;
197+
}
198+
const t = grid[i][j];
199+
grid[i][j] = 0;
200+
let ans = 0;
201+
const dirs = [-1, 0, 1, 0, -1];
202+
for (let k = 0; k < 4; ++k) {
203+
ans = Math.max(ans, t + dfs(i + dirs[k], j + dirs[k + 1]));
204+
}
205+
grid[i][j] = t;
206+
return ans;
207+
}
208+
let ans = 0;
209+
for (let i = 0; i < m; ++i) {
210+
for (let j = 0; j < n; ++j) {
211+
ans = Math.max(ans, dfs(i, j));
212+
}
213+
}
214+
return ans;
215+
};
216+
```
217+
187218
### **...**
188219

189220
```
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
class Solution {
22
public:
3-
vector<vector<int>> grid;
43
vector<int> dirs = {-1, 0, 1, 0, -1};
54

65
int getMaximumGold(vector<vector<int>>& grid) {
7-
this->grid = grid;
86
int ans = 0;
97
for (int i = 0; i < grid.size(); ++i)
108
for (int j = 0; j < grid[0].size(); ++j)
11-
ans = max(ans, dfs(i, j));
9+
ans = max(ans, dfs(i, j, grid));
1210
return ans;
1311
}
1412

15-
int dfs(int i, int j) {
13+
int dfs(int i, int j, vector<vector<int>>& grid) {
1614
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == 0) return 0;
1715
int t = grid[i][j];
1816
grid[i][j] = 0;
19-
int res = 0;
20-
for (int k = 0; k < 4; ++k) res = max(res, t + dfs(i + dirs[k], j + dirs[k + 1]));
17+
int ans = 0;
18+
for (int k = 0; k < 4; ++k) ans = max(ans, t + dfs(i + dirs[k], j + dirs[k + 1], grid));
2119
grid[i][j] = t;
22-
return res;
20+
return ans;
2321
}
2422
};

solution/1200-1299/1219.Path with Maximum Gold/Solution.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ func getMaximumGold(grid [][]int) int {
77
}
88
t := grid[i][j]
99
grid[i][j] = 0
10-
res := 0
10+
ans := 0
1111
dirs := []int{-1, 0, 1, 0, -1}
1212
for k := 0; k < 4; k++ {
13-
res = max(res, t+dfs(i+dirs[k], j+dirs[k+1]))
13+
ans = max(ans, t+dfs(i+dirs[k], j+dirs[k+1]))
1414
}
1515
grid[i][j] = t
16-
return res
16+
return ans
1717
}
1818
ans := 0
1919
for i := 0; i < m; i++ {

0 commit comments

Comments
 (0)