-
发表于 2024.07.14
-
可以使用贪心解决:首先直接将参数
upper
和lower
视作为第一行和第二行待填充1
的个数。从左到右遍历colsum
,如果遇到2
,则需要同时填充两行,并更新upper
和lower
;如果遇到1
,即仅需填充一行,此时取upper
和lower
中剩余值较大的一个进行填充,并更新计数;如果遇到0
,则不需要填充,直接跳过。最后,如果upper
和lower
都为0
,则返回填充后的矩阵,否则返回空列表(题意表明可能存在不合法的参数,此时upper
或lower
存在小于0
的情况)。为什么需要取
upper
和lower
中剩余值较大的一个进行填充呢?如果提前消耗掉其中的某一个,说不定后面会遇到2
,导致另一个无法填充。因此,我们需要保证两行的填充尽量平衡,以便后续的填充。class Solution: def reconstructMatrix(self, upper: int, lower: int, colsum: List[int]) -> List[List[int]]: col_cnt = len(colsum) ans = [[0] * col_cnt for _ in range(2)] for i in range(col_cnt): if colsum[i] == 2: ans[0][i] = ans[1][i] = 1 upper -= 1 lower -= 1 elif colsum[i] == 1: if upper >= lower: ans[0][i] = 1 upper -= 1 else: ans[1][i] = 1 lower -= 1 return ans if upper == lower == 0 else []
- LC 题目链接
-