Skip to content

Commit f4163d7

Browse files
committed
homework_week6
1 parent a485aab commit f4163d7

4 files changed

Lines changed: 108 additions & 1 deletion

File tree

Week06/221-最大正方形.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
2+
#
3+
# 示例:
4+
#
5+
# 输入:
6+
#
7+
# 1 0 1 0 0
8+
# 1 0 1 1 1
9+
# 1 1 1 1 1
10+
# 1 0 0 1 0
11+
#
12+
# 输出: 4
13+
# Related Topics 动态规划
14+
15+
16+
# leetcode submit region begin(Prohibit modification and deletion)
17+
class Solution:
18+
def maximalSquare(self, matrix: List[List[str]]) -> int:
19+
if not matrix:
20+
return 0
21+
res = 0
22+
dp = [[0 for _ in range(len(matrix[0])+1)] for _ in range(len(matrix)+1)]
23+
for i in range(1, len(dp)):
24+
for j in range(1, len(dp[0])):
25+
if matrix[i-1][j-1] == "1":
26+
dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
27+
res = max(dp[i][j], res)
28+
29+
return pow(res, 2)
30+
# leetcode submit region end(Prohibit modification and deletion)

Week06/64-最小路径和.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
2+
#
3+
# 说明:每次只能向下或者向右移动一步。
4+
#
5+
# 示例:
6+
#
7+
# 输入:
8+
# [
9+
#   [1,3,1],
10+
# [1,5,1],
11+
# [4,2,1]
12+
# ]
13+
# 输出: 7
14+
# 解释: 因为路径 1→3→1→1→1 的总和最小。
15+
#
16+
# Related Topics 数组 动态规划
17+
18+
19+
# leetcode submit region begin(Prohibit modification and deletion)
20+
class Solution:
21+
def minPathSum(self, grid: List[List[int]]) -> int:
22+
for i in range(len(grid)):
23+
for j in range(len(grid[0])):
24+
if i == j == 0: continue
25+
elif i == 0: grid[i][j] = grid[i][j-1] + grid[i][j]
26+
elif j == 0: grid[i][j] = grid[i-1][j] + grid[i][j]
27+
else: grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j]
28+
return grid[-1][-1]
29+
# leetcode submit region end(Prohibit modification and deletion)

Week06/91-解码方法.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# 一条包含字母 A-Z 的消息通过以下方式进行了编码:
2+
#
3+
# 'A' -> 1
4+
# 'B' -> 2
5+
# ...
6+
# 'Z' -> 26
7+
#
8+
#
9+
# 给定一个只包含数字的非空字符串,请计算解码方法的总数。
10+
#
11+
# 示例 1:
12+
#
13+
# 输入: "12"
14+
# 输出: 2
15+
# 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
16+
#
17+
#
18+
# 示例 2:
19+
#
20+
# 输入: "226"
21+
# 输出: 3
22+
# 解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
23+
#
24+
# Related Topics 字符串 动态规划
25+
26+
27+
# leetcode submit region begin(Prohibit modification and deletion)
28+
class Solution:
29+
def numDecodings(self, s: str) -> int:
30+
n = len(s)
31+
if n == 0: return 0
32+
dp = [1, 0]
33+
dp[1] = 1 if s[0] != '0' else 0
34+
for i in range(1, n):
35+
dp.append(0)
36+
if s[i] != '0':
37+
dp[i + 1] += dp[i]
38+
if '10' <= s[i - 1:i + 1] <= '26':
39+
dp[i + 1] += dp[i - 1]
40+
41+
return dp[-1]
42+
43+
# leetcode submit region end(Prohibit modification and deletion)

Week06/NOTE.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
学习笔记
1+
学习笔记
2+
3+
动态规划和递归或者分治没有本质上的区别(关键看有误最优的子结构)
4+
共性:找到重复子问题
5+
差异性:最优子结构,中途可以淘汰次优解
6+

0 commit comments

Comments
 (0)