File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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)
Original file line number Diff line number Diff line change 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)
Original file line number Diff line number Diff line change 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)
Original file line number Diff line number Diff line change 1- 学习笔记
1+ 学习笔记
2+
3+ 动态规划和递归或者分治没有本质上的区别(关键看有误最优的子结构)
4+ 共性:找到重复子问题
5+ 差异性:最优子结构,中途可以淘汰次优解
6+
You can’t perform that action at this time.
0 commit comments