Back to all solutions
#1253 - Reconstruct a 2-Row Binary Matrix
Problem Description
Given the following details of a matrix with n columns and 2 rows:
- The matrix is a binary matrix, which means each element in the matrix can be 0 or 1.
- 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], where colsum is given as an integer array with length n.
Your task is to reconstruct the matrix with upper, lower and colsum.
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.
Solution
/**
* @param {number} upper
* @param {number} lower
* @param {number[]} colsum
* @return {number[][]}
*/
var reconstructMatrix = function(upper, lower, colsum) {
const n = colsum.length;
const matrix = [[], []];
let upperLeft = upper;
let lowerLeft = lower;
for (let i = 0; i < n; i++) {
if (colsum[i] === 2) {
matrix[0][i] = 1;
matrix[1][i] = 1;
upperLeft--;
lowerLeft--;
} else {
matrix[0][i] = 0;
matrix[1][i] = 0;
}
}
if (upperLeft < 0 || lowerLeft < 0) return [];
for (let i = 0; i < n; i++) {
if (colsum[i] === 1) {
if (upperLeft > 0) {
matrix[0][i] = 1;
matrix[1][i] = 0;
upperLeft--;
} else if (lowerLeft > 0) {
matrix[0][i] = 0;
matrix[1][i] = 1;
lowerLeft--;
} else {
return [];
}
}
}
return upperLeft === 0 && lowerLeft === 0 ? matrix : [];
};