【leetcode】1253. Reconstruct a 2-Row Binary Matrix
题目如下:
Given the following details of a matrix with
n
columns and2
rows :
- The matrix is a binary matrix, which means each element in the matrix can be
0
or1
.- The sum of elements of the 0-th(upper) row is given as
upper
.- The sum of elements of the 1-st(lower) row is given as
lower
.- The sum of elements in the i-th column(0-indexed) is
colsum[i]
, wherecolsum
is given as an integer array with lengthn
.Your task is to reconstruct the matrix with
upper
,lower
andcolsum
.Return it as a 2-D integer array.
If there are more than one valid solution, any of them will be accepted.
If no valid solution exists, return an empty 2-D array.
Example 1:
Input: upper = 2, lower = 1, colsum = [1,1,1] Output: [[1,1,0],[0,0,1]] Explanation: [[1,0,1],[0,1,0]], and [[0,1,1],[1,0,0]] are also correct answers.Example 2:
Input: upper = 2, lower = 3, colsum = [2,2,1,1] Output: []Example 3:
Input: upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1] Output: [[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]Constraints:
1 <= colsum.length <= 10^5
0 <= upper, lower <= colsum.length
0 <= colsum[i] <= 2
解题思路:colsum[i] = 0 和 colsum[i] = 2的场景很简单,output[0][i] 和 output[1][i] 都为0或者都为1即可。剩下colsum[i] = 1的场景,优先把1分配给output[0][i] ,达到upper上限后,再把剩余的1分配给output[1][i]。
代码如下:
class Solution(object): def reconstructMatrix(self, upper, lower, colsum): """ :type upper: int :type lower: int :type colsum: List[int] :rtype: List[List[int]] """ res = [[0] * len(colsum) for _ in range(2)] one_count = 0 two_count = 0 for i in range(len(colsum)): if colsum[i] == 2: res[0][i] = res[1][i] = 1 two_count += 1 elif colsum[i] == 1:one_count += 1 if upper < two_count or lower < two_count or (upper - two_count + lower - two_count) != one_count: return [] count = upper - two_count for i in range(len(colsum)): if colsum[i] == 0 or colsum[i] == 2:continue if count > 0: res[0][i] = 1 count -= 1 else: res[1][i] = 1 return res