【leetcode】1253. Reconstruct a 2-Row Binary Matrix
题目如下:
Given the following details of a matrix with
ncolumns and2rows :
- The matrix is a binary matrix, which means each element in the matrix can be
0or1.- 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], wherecolsumis given as an integer array with lengthn.Your task is to reconstruct the matrix with
upper,lowerandcolsum.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^50 <= upper, lower <= colsum.length0 <= 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
浙公网安备 33010602011771号