当前位置:实例文章 » 其他实例» [文章]LeetCode 1183 矩阵中 1 的最大数量 (图解)

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


### 总结本题目要求找到矩阵中所有元素之和的最大值。我们使用动态规划来解决这个问题,首先填充一个动态规划表,然后返回表中最大的值。测试用例验证了我们的解决方案正确性。

其他信息

其他资源

Top