★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11831505.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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
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
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.
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
给你一个 2
行 n
列的二进制数组:
- 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是
0
就是1
。 - 第
0
行的元素之和为upper
。 - 第
1
行的元素之和为lower
。 - 第
i
列(从0
开始编号)的元素之和为colsum[i]
,colsum
是一个长度为n
的整数数组。
你需要利用 upper
,lower
和 colsum
来重构这个矩阵,并以二维整数数组的形式返回它。
如果有多个不同的答案,那么任意一个都可以通过本题。
如果不存在符合要求的答案,就请返回一个空的二维数组。
示例 1:
输入:upper = 2, lower = 1, colsum = [1,1,1] 输出:[[1,1,0],[0,0,1]] 解释:[[1,0,1],[0,1,0]] 和 [[0,1,1],[1,0,0]] 也是正确答案。
示例 2:
输入:upper = 2, lower = 3, colsum = [2,2,1,1] 输出:[]
示例 3:
输入:upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1] 输出:[[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]
提示:
1 <= colsum.length <= 10^5
0 <= upper, lower <= colsum.length
0 <= colsum[i] <= 2
1 class Solution { 2 func reconstructMatrix(_ upper: Int, _ lower: Int, _ colsum: [Int]) -> [[Int]] { 3 var upper = upper 4 let lower = lower 5 if upper + lower != colsum.reduce(0,+) 6 { 7 return [[Int]]() 8 } 9 var a:[Int] = [Int]() 10 var b:[Int] = [Int]() 11 for i in colsum 12 { 13 if upper > 0 && i != 0 14 { 15 upper -= 1 16 a += [1] 17 } 18 else 19 { 20 a += [0] 21 } 22 b += [i - a.last!] 23 } 24 if upper == 0 25 { 26 return [a,b] 27 } 28 return [[Int]]() 29 } 30 }
1 class Solution { 2 func reconstructMatrix(_ upper: Int, _ lower: Int, _ colsum: [Int]) -> [[Int]] { 3 4 var indices = [Int]() 5 var onesCount = 0 6 var ans = Array<Array<Int>>(repeating: Array<Int>(repeating: 0, count: colsum.count), count: 2) 7 for i in 0..<colsum.count { 8 if colsum[i] == 2 { 9 ans[1][i] = 1 10 ans[0][i] = 1 11 onesCount += 1 12 } else if colsum[i] == 1 { 13 indices.append(i) 14 } 15 } 16 let upperRemain = upper - onesCount 17 let lowerRemain = lower - onesCount 18 guard upperRemain >= 0 && lowerRemain >= 0 && upperRemain + lowerRemain == indices.count else { 19 return [] 20 } 21 let currentUpperSum = upper - onesCount 22 var j = 0 23 while j < currentUpperSum { 24 ans[0][indices[j]] = 1 25 j += 1 26 } 27 while j < indices.count { 28 ans[1][indices[j]] = 1 29 j += 1 30 } 31 return ans 32 } 33 }