题目描述:给你两个非负整数数组 rowSum 和 colSum ,其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和。换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵,且该矩阵满足 rowSum 和 colSum 的要求。请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。
解题思路:先用零初始化要返回的矩阵,然后从左到右从上到下依次填值,对于[i][j]
处的值,我们填上min(rowSum[i], colSum[j])
,然后将对应位置的行和和列和前去我们填上的值,这样不断更新行和和列和,因为题目保证至少存在一个可行矩阵,那么最终行和和列和都会变为零。代码如下:
class Solution:
def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]:
rows = len(rowSum)
cols = len(colSum)
res = [[0]*cols for _ in range(rows)]
for i in range(rows):
if rowSum[i] == 0:
continue
for j in range(cols):
if colSum[j] == 0:
continue
res[i][j] = min(rowSum[i], colSum[j])
rowSum[i] -= res[i][j]
colSum[j] -= res[i][j]
return res