Skip to content

Commit 2dc2419

Browse files
committed
feat: add solutions to leetcode problem: No.0064. Minimum Path Sum
1 parent 62226f4 commit 2dc2419

File tree

11 files changed

+236
-25
lines changed

11 files changed

+236
-25
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@
156156
- [接雨水](/solution/0000-0099/0042.Trapping%20Rain%20Water/README.md)
157157
- [最大子序和](/solution/0000-0099/0053.Maximum%20Subarray/README.md)
158158
- [礼物的最大价值](/lcof/面试题47.%20礼物的最大价值/README.md)
159+
- [最小路径和](/solution/0000-0099/0064.Minimum%20Path%20Sum/README.md)
159160
- [解码方法](/solution/0000-0099/0091.Decode%20Ways/README.md)
160161
- [乘积最大子序列](/solution/0100-0199/0152.Maximum%20Product%20Subarray/README.md)
161162
- [打家劫舍](/solution/0100-0199/0198.House%20Robber/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
149149
- [Climbing Stairs](/solution/0000-0099/0070.Climbing%20Stairs/README_EN.md)
150150
- [Trapping Rain Water](/solution/0000-0099/0042.Trapping%20Rain%20Water/README_EN.md)
151151
- [Maximum Subarray](/solution/0000-0099/0053.Maximum%20Subarray/README_EN.md)
152+
- [Minimum Path Sum](/solution/0000-0099/0064.Minimum%20Path%20Sum/README_EN.md)
152153
- [Decode Ways](/solution/0000-0099/0091.Decode%20Ways/README_EN.md)
153154
- [Maximum Product Subarray](/solution/0100-0199/0152.Maximum%20Product%20Subarray/README_EN.md)
154155
- [House Robber](/solution/0100-0199/0198.House%20Robber/README_EN.md)

solution/0000-0099/0064.Minimum Path Sum/README.md

+56-2
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,81 @@
3838
<li><code>0 <= grid[i][j] <= 100</code></li>
3939
</ul>
4040

41-
4241
## 解法
4342

4443
<!-- 这里可写通用的实现逻辑 -->
4544

45+
动态规划法。
46+
4647
<!-- tabs:start -->
4748

4849
### **Python3**
4950

5051
<!-- 这里可写当前语言的特殊实现逻辑 -->
5152

5253
```python
53-
54+
class Solution:
55+
def minPathSum(self, grid: List[List[int]]) -> int:
56+
m, n = len(grid), len(grid[0])
57+
dp = [[grid[0][0]] * n for _ in range(m)]
58+
for i in range(1, m):
59+
dp[i][0] = dp[i - 1][0] + grid[i][0]
60+
for j in range(1, n):
61+
dp[0][j] = dp[0][j - 1] + grid[0][j]
62+
for i in range(1, m):
63+
for j in range(1, n):
64+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
65+
return dp[m - 1][n - 1]
5466
```
5567

5668
### **Java**
5769

5870
<!-- 这里可写当前语言的特殊实现逻辑 -->
5971

6072
```java
73+
class Solution {
74+
public int minPathSum(int[][] grid) {
75+
int m = grid.length, n = grid[0].length;
76+
int[][] dp = new int[m][n];
77+
dp[0][0] = grid[0][0];
78+
for (int i = 1; i < m; ++i) {
79+
dp[i][0] = dp[i - 1][0] + grid[i][0];
80+
}
81+
for (int j = 1; j < n; ++j) {
82+
dp[0][j] = dp[0][j - 1] + grid[0][j];
83+
}
84+
for (int i = 1; i < m; ++i) {
85+
for (int j = 1; j < n; ++j) {
86+
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
87+
}
88+
}
89+
return dp[m - 1][n - 1];
90+
}
91+
}
92+
```
6193

94+
### **C++**
95+
96+
```cpp
97+
class Solution {
98+
public:
99+
int minPathSum(vector<vector<int>>& grid) {
100+
int m = grid.size(), n = grid[0].size();
101+
vector<vector<int>> dp(m, vector<int>(n, grid[0][0]));
102+
for (int i = 1; i < m; ++i) {
103+
dp[i][0] = dp[i - 1][0] + grid[i][0];
104+
}
105+
for (int j = 1; j < n; ++j) {
106+
dp[0][j] = dp[0][j - 1] + grid[0][j];
107+
}
108+
for (int i = 1; i < m; ++i) {
109+
for (int j = 1; j < n; ++j) {
110+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
111+
}
112+
}
113+
return dp[m - 1][n - 1];
114+
}
115+
};
62116
```
63117
64118
### **...**

solution/0000-0099/0064.Minimum Path Sum/README_EN.md

+54-2
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,73 @@
3434
<li><code>0 &lt;= grid[i][j] &lt;= 100</code></li>
3535
</ul>
3636

37-
3837
## Solutions
3938

4039
<!-- tabs:start -->
4140

4241
### **Python3**
4342

4443
```python
45-
44+
class Solution:
45+
def minPathSum(self, grid: List[List[int]]) -> int:
46+
m, n = len(grid), len(grid[0])
47+
dp = [[grid[0][0]] * n for _ in range(m)]
48+
for i in range(1, m):
49+
dp[i][0] = dp[i - 1][0] + grid[i][0]
50+
for j in range(1, n):
51+
dp[0][j] = dp[0][j - 1] + grid[0][j]
52+
for i in range(1, m):
53+
for j in range(1, n):
54+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
55+
return dp[m - 1][n - 1]
4656
```
4757

4858
### **Java**
4959

5060
```java
61+
class Solution {
62+
public int minPathSum(int[][] grid) {
63+
int m = grid.length, n = grid[0].length;
64+
int[][] dp = new int[m][n];
65+
dp[0][0] = grid[0][0];
66+
for (int i = 1; i < m; ++i) {
67+
dp[i][0] = dp[i - 1][0] + grid[i][0];
68+
}
69+
for (int j = 1; j < n; ++j) {
70+
dp[0][j] = dp[0][j - 1] + grid[0][j];
71+
}
72+
for (int i = 1; i < m; ++i) {
73+
for (int j = 1; j < n; ++j) {
74+
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
75+
}
76+
}
77+
return dp[m - 1][n - 1];
78+
}
79+
}
80+
```
5181

82+
### **C++**
83+
84+
```cpp
85+
class Solution {
86+
public:
87+
int minPathSum(vector<vector<int>>& grid) {
88+
int m = grid.size(), n = grid[0].size();
89+
vector<vector<int>> dp(m, vector<int>(n, grid[0][0]));
90+
for (int i = 1; i < m; ++i) {
91+
dp[i][0] = dp[i - 1][0] + grid[i][0];
92+
}
93+
for (int j = 1; j < n; ++j) {
94+
dp[0][j] = dp[0][j - 1] + grid[0][j];
95+
}
96+
for (int i = 1; i < m; ++i) {
97+
for (int j = 1; j < n; ++j) {
98+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
99+
}
100+
}
101+
return dp[m - 1][n - 1];
102+
}
103+
};
52104
```
53105
54106
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
class Solution {
22
public:
33
int minPathSum(vector<vector<int>>& grid) {
4-
int row = grid.size();
5-
if(row == 0)return 0;
6-
int column = grid[0].size();
7-
8-
vector<vector<int>> path(row,vector<int>(column,0));
9-
path[0][0] = grid[0][0];
10-
for(int i = 1 ; i < column ; i++)path[0][i] = path[0][i-1] + grid[0][i];
11-
for(int i = 1 ; i < row;i++)path[i][0] = path[i-1][0]+grid[i][0];
12-
13-
for(int i = 1;i<row;i++){
14-
for(int j = 1;j<column;j++){
15-
path[i][j] = min(path[i-1][j],path[i][j-1]) + grid[i][j];
4+
int m = grid.size(), n = grid[0].size();
5+
vector<vector<int>> dp(m, vector<int>(n, grid[0][0]));
6+
for (int i = 1; i < m; ++i) {
7+
dp[i][0] = dp[i - 1][0] + grid[i][0];
8+
}
9+
for (int j = 1; j < n; ++j) {
10+
dp[0][j] = dp[0][j - 1] + grid[0][j];
11+
}
12+
for (int i = 1; i < m; ++i) {
13+
for (int j = 1; j < n; ++j) {
14+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
1615
}
1716
}
18-
19-
return path[row-1][column-1];
17+
return dp[m - 1][n - 1];
2018
}
2119
};
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
class Solution {
22
public int minPathSum(int[][] grid) {
3-
for (int i = 1; i < grid.length; i++) grid[i][0] += grid[i - 1][0];
4-
for (int j = 1; j < grid[0].length; j++) grid[0][j] += grid[0][j - 1];
5-
for (int i = 1; i < grid.length; i++)
6-
for (int j = 1; j < grid[0].length; j++) grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
7-
return grid[grid.length-1][grid[0].length-1];
3+
int m = grid.length, n = grid[0].length;
4+
int[][] dp = new int[m][n];
5+
dp[0][0] = grid[0][0];
6+
for (int i = 1; i < m; ++i) {
7+
dp[i][0] = dp[i - 1][0] + grid[i][0];
8+
}
9+
for (int j = 1; j < n; ++j) {
10+
dp[0][j] = dp[0][j - 1] + grid[0][j];
11+
}
12+
for (int i = 1; i < m; ++i) {
13+
for (int j = 1; j < n; ++j) {
14+
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
15+
}
16+
}
17+
return dp[m - 1][n - 1];
818
}
919
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def minPathSum(self, grid: List[List[int]]) -> int:
3+
m, n = len(grid), len(grid[0])
4+
dp = [[grid[0][0]] * n for _ in range(m)]
5+
for i in range(1, m):
6+
dp[i][0] = dp[i - 1][0] + grid[i][0]
7+
for j in range(1, n):
8+
dp[0][j] = dp[0][j - 1] + grid[0][j]
9+
for i in range(1, m):
10+
for j in range(1, n):
11+
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
12+
return dp[m - 1][n - 1]

solution/0000-0099/0074.Search a 2D Matrix/README.md

+30-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
<li><code>-10<sup>4</sup> <= matrix[i][j], target <= 10<sup>4</sup></code></li>
4141
</ul>
4242

43-
4443
## 解法
4544

4645
<!-- 这里可写通用的实现逻辑 -->
@@ -111,6 +110,36 @@ public:
111110
};
112111
```
113112
113+
### **JavaScript**
114+
115+
```js
116+
/**
117+
* @param {number[][]} matrix
118+
* @param {number} target
119+
* @return {boolean}
120+
*/
121+
var searchMatrix = function (matrix, target) {
122+
const m = matrix.length;
123+
const n = matrix[0].length;
124+
let l = 0;
125+
let h = m * n - 1;
126+
while (l <= h) {
127+
const mid = (l + h) >>> 1;
128+
const x = Math.floor(mid / n);
129+
const y = mid % n;
130+
if (matrix[x][y] == target) {
131+
return true;
132+
}
133+
if (matrix[x][y] < target) {
134+
l = mid + 1;
135+
} else {
136+
h = mid - 1;
137+
}
138+
}
139+
return false;
140+
};
141+
```
142+
114143
### **...**
115144

116145
```

solution/0000-0099/0074.Search a 2D Matrix/README_EN.md

+30-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
<li><code>-10<sup>4</sup> &lt;= matrix[i][j], target &lt;= 10<sup>4</sup></code></li>
3737
</ul>
3838

39-
4039
## Solutions
4140

4241
<!-- tabs:start -->
@@ -99,6 +98,36 @@ public:
9998
};
10099
```
101100
101+
### **JavaScript**
102+
103+
```js
104+
/**
105+
* @param {number[][]} matrix
106+
* @param {number} target
107+
* @return {boolean}
108+
*/
109+
var searchMatrix = function (matrix, target) {
110+
const m = matrix.length;
111+
const n = matrix[0].length;
112+
let l = 0;
113+
let h = m * n - 1;
114+
while (l <= h) {
115+
const mid = (l + h) >>> 1;
116+
const x = Math.floor(mid / n);
117+
const y = mid % n;
118+
if (matrix[x][y] == target) {
119+
return true;
120+
}
121+
if (matrix[x][y] < target) {
122+
l = mid + 1;
123+
} else {
124+
h = mid - 1;
125+
}
126+
}
127+
return false;
128+
};
129+
```
130+
102131
### **...**
103132

104133
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[][]} matrix
3+
* @param {number} target
4+
* @return {boolean}
5+
*/
6+
var searchMatrix = function (matrix, target) {
7+
const m = matrix.length;
8+
const n = matrix[0].length;
9+
let l = 0;
10+
let h = m * n - 1;
11+
while (l <= h) {
12+
const mid = (l + h) >>> 1;
13+
const x = Math.floor(mid / n);
14+
const y = mid % n;
15+
if (matrix[x][y] == target) {
16+
return true;
17+
}
18+
if (matrix[x][y] < target) {
19+
l = mid + 1;
20+
} else {
21+
h = mid - 1;
22+
}
23+
}
24+
return false;
25+
};
Loading

0 commit comments

Comments
 (0)