题目描述:
给你一个 2 行 n 列的二进制数组:
矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。
第 0 行的元素之和为 upper。
第 1 行的元素之和为 lower。
第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。
你需要利用 upper,lower 和 colsum 来重构这个矩阵,并以二维整数数组的形式返回它。
如果有多个不同的答案,那么任意一个都可以通过本题。
如果不存在符合要求的答案,就请返回一个空的二维数组。
示例:
解题思路:
两行和不等于二维数组和或二维数组值为2的个数大于两行和中小的那个,返回空–》判断二维数组,为2,都赋值为1;为1,选择行和大的赋值为1,另一行赋值为0;为0,两行都赋值为0。
代码附上:
class Solution {
public List<List<Integer>> reconstructMatrix(int upper, int lower, int[] colsum) {
int sum=0,two=0;
for(int i=0;i<colsum.length;i++) {
if(colsum[i]==2) two++;
sum+=colsum[i];
}
if(upper+lower!=sum||two>Math.min(upper,lower)) return new ArrayList<List<Integer>>();
List<List<Integer>> res = new ArrayList<List<Integer>>();
for (int i = 0; i < 2; i++) {
res.add(new ArrayList<Integer>());
}
for(int i=0;i<colsum.length;i++) {
if(colsum[i]==2) {
res.get(0).add(1);
res.get(1).add(1);
} else if (colsum[i]==1) {
if(upper>=lower) {
res.get(0).add(1);
res.get(1).add(0);
upper--;
} else {
res.get(0).add(0);
res.get(1).add(1);
lower--;
}
} else {
res.get(0).add(0);
res.get(1).add(0);
}
}
return res;
}
}