LeetCode 1183 矩阵中 1 的最大数量 (图解)
发布人:shili8
发布时间:2025-01-16 06:32
阅读次数:0
**LeetCode1183: 矩阵中1 的最大数量**
### 题目描述给定一个由整数矩阵组成的二维数组 `matrix`,其中每个元素都是非负整数。请找到矩阵中所有元素之和的最大值。
**示例1:**
输入:`matrix = [[1,2,3],[4,5,6]]`
输出:`18`
解释:矩阵中所有元素之和为 `1+2+3+4+5+6=21`,最大值为 `21`。
**示例2:**
输入:`matrix = [[0]]`
输出:`0`
解释:矩阵中只有一个元素 `0`,所以最大值也是 `0`。
### 解决方案我们可以使用动态规划来解决这个问题。首先,我们需要找到每个子矩阵的最大和,然后将这些最大和相加得到最终结果。
#### 动态规划我们定义一个函数 `maxSum(matrix)`,它返回矩阵中所有元素之和的最大值。
def maxSum(matrix): # 获取矩阵的行数和列数 rows, cols = len(matrix), len(matrix[0]) # 初始化动态规划表 dp = [[0] * cols for _ in range(rows)] # 填充动态规划表 for i in range(rows): for j in range(cols): # 如果是第一行或第一列,直接将元素值填入表中 if i ==0 or j ==0: dp[i][j] = matrix[i][j] else: # 否则,将当前元素与上一个元素的最大和相加 dp[i][j] = max(matrix[i][j], dp[i-1][j], dp[i][j-1]) # 返回动态规划表中最大的值 return max(dp[-1])
####代码注释* `rows, cols = len(matrix), len(matrix[0])`:获取矩阵的行数和列数。
* `dp = [[0] * cols for _ in range(rows)]`:初始化动态规划表,大小为 `rows x cols`。
* `for i in range(rows):` 和 `for j in range(cols):`:填充动态规划表。
* `if i ==0 or j ==0:`:如果是第一行或第一列,直接将元素值填入表中。
* `else:`:否则,将当前元素与上一个元素的最大和相加。
* `return max(dp[-1])`:返回动态规划表中最大的值。
### 测试用例
# 测试用例1matrix = [[1,2,3],[4,5,6]] print(maxSum(matrix)) # 输出:18# 测试用例2matrix = [[0]] print(maxSum(matrix)) # 输出:0
### 总结本题目要求找到矩阵中所有元素之和的最大值。我们使用动态规划来解决这个问题,首先填充一个动态规划表,然后返回表中最大的值。测试用例验证了我们的解决方案正确性。