Skip to content

Commit 9bba610

Browse files
committed
update
1 parent 463bed6 commit 9bba610

File tree

4 files changed

+57
-61
lines changed

4 files changed

+57
-61
lines changed

[M]dynamic-programming/[M]dynamic-programming/10-regular-expression-matching.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,36 @@ class Solution:
22
def isMatch(self, s: str, p: str) -> bool:
33
m, n = len(s), len(p)
44
dp = [[False for _ in range(n + 1)] for _ in range(m + 1)]
5-
dp[0][0] = True
65

7-
for j in range(1, n + 1):
8-
if p[j - 1] == '*':
9-
dp[0][j] = dp[0][j - 2]
6+
dp[0][0] = True
7+
for i in range(1, n + 1):
8+
if p[i - 1] == '*' and dp[0][i - 2]:
9+
dp[0][i] = True
10+
for j in range(1, m + 1):
11+
dp[j][0] = False
1012

1113
for i in range(1, m + 1):
1214
for j in range(1, n + 1):
13-
if p[j - 1] == '*':
14-
if p[j - 2] == '.':
15-
dp[i][j] = dp[i][j - 2] or dp[i - 1][j - 2] or dp[i - 1][j]
16-
else:
17-
if s[i - 1] == p[j - 2]:
18-
dp[i][j] = dp[i][j - 2] or dp[i - 1][j - 2] or dp[i - 1][j]
19-
else:
20-
dp[i][j] = dp[i][j - 2]
21-
elif p[j - 1] == '.':
15+
if s[i - 1] == p[j - 1]:
2216
dp[i][j] = dp[i - 1][j - 1]
23-
elif s[i - 1] == p[j - 1]:
17+
elif p[j - 1] == '.':
2418
dp[i][j] = dp[i - 1][j - 1]
19+
elif p[j - 1] == '*':
20+
if p[j - 2] == '.':
21+
dp[i][j] |= dp[i][j - 2]
22+
dp[i][j] |= dp[i - 1][j - 2]
23+
dp[i][j] |= dp[i - 1][j]
24+
elif s[i - 1] == p[j - 2]:
25+
dp[i][j] |= dp[i][j - 2]
26+
dp[i][j] |= dp[i - 1][j - 2]
27+
dp[i][j] |= dp[i - 1][j]
28+
else:
29+
dp[i][j] = dp[i][j - 2]
2530
else:
26-
pass
27-
31+
dp[i][j] = False
32+
2833
return dp[m][n]
29-
34+
3035
# time O(mn)
3136
# space O(mn)
3237
# using dynamic programming and double sequence

[M]dynamic-programming/[M]dynamic-programming/221-maximal-square.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
class Solution:
22
def maximalSquare(self, matrix: List[List[str]]) -> int:
3+
34
rows, cols = len(matrix), len(matrix[0])
45
dp = [[0 for _ in range(cols)] for _ in range(rows)]
6+
57
res = 0
6-
for r in range(rows):
7-
for c in range(cols):
8-
if r == 0:
9-
if matrix[r][c] == '1':
10-
dp[r][c] = 1
11-
elif c == 0:
12-
if matrix[r][c] == '1':
13-
dp[r][c] = 1
8+
for i in range(rows):
9+
for j in range(cols):
10+
if matrix[i][j] == "0":
11+
continue
12+
if i == 0 or j == 0:
13+
dp[i][j] = 1
1414
else:
15-
if matrix[r][c] == '1':
16-
dp[r][c] = min(dp[r - 1][c], dp[r][c - 1], dp[r - 1][c - 1]) + 1
17-
18-
res = max(res, dp[r][c])
19-
20-
return res ** 2
15+
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
16+
res = max(res, dp[i][j] ** 2)
17+
return res
2118

2219
# time O(nm), due to matrix' size
2320
# space O(nm), due to list

[M]dynamic-programming/[M]dynamic-programming/63-unique-paths-ii.py

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,22 @@ class Solution:
22
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
33
g = obstacleGrid
44
rows, cols = len(g), len(g[0])
5-
res = [[0 for _ in range(cols)] for _ in range(rows)]
6-
if g[0][0] == 0:
7-
res[0][0] = 1
8-
for i in range(1, rows):
9-
if g[i][0] == 1:
10-
res[i][0] = 0
11-
else:
12-
res[i][0] = res[i - 1][0]
13-
for i in range(1, cols):
14-
if g[0][i] == 1:
15-
res[0][i] = 0
16-
else:
17-
res[0][i] = res[0][i - 1]
18-
19-
for i in range(1, rows):
20-
for j in range(1, cols):
5+
dp = [[0 for _ in range(cols)] for _ in range(rows)]
6+
7+
for i in range(rows):
8+
for j in range(cols):
219
if g[i][j] == 1:
22-
res[i][j] = 0
10+
continue
11+
if i == 0 and j == 0:
12+
dp[i][j] = 1
13+
elif i == 0:
14+
dp[i][j] = dp[i][j - 1]
15+
elif j == 0:
16+
dp[i][j] = dp[i - 1][j]
2317
else:
24-
res[i][j] = res[i - 1][j] + res[i][j - 1]
25-
26-
return res[rows - 1][cols - 1]
18+
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
19+
20+
return dp[rows- 1][cols - 1]
2721

2822
# time O(RC)
2923
# space O(RC)

[M]dynamic-programming/[M]dynamic-programming/64-minimum-path-sum.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
class Solution:
22
def minPathSum(self, grid: List[List[int]]) -> int:
33
rows, cols = len(grid), len(grid[0])
4-
dp = [[0 for _ in range(cols)] for _ in range(rows)]
4+
dp = [[float('inf') for _ in range(cols)] for _ in range(rows)]
55

6-
for r in range(rows):
7-
for c in range(cols):
8-
if r == 0 and c == 0:
9-
dp[r][c] = grid[r][c]
10-
elif r == 0:
11-
dp[r][c] = dp[r][c - 1] + grid[r][c]
12-
elif c == 0:
13-
dp[r][c] = dp[r - 1][c] + grid[r][c]
6+
for i in range(rows):
7+
for j in range(cols):
8+
if i == 0 and j == 0:
9+
dp[i][j] = grid[i][j]
10+
elif i == 0:
11+
dp[i][j] = dp[i][j - 1] + grid[i][j]
12+
elif j == 0:
13+
dp[i][j] = dp[i - 1][j] + grid[i][j]
1414
else:
15-
dp[r][c] = min(dp[r][c - 1], dp[r - 1][c]) + grid[r][c]
15+
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j]
1616

1717
return dp[rows - 1][cols - 1]
1818

0 commit comments

Comments
 (0)