考虑贪心策略。每一列,把1优先放在lower和upper两行中较大的那一行上。
impl Solution {
pub fn reconstruct_matrix(upper: i32, lower: i32, colsum: Vec<i32>) -> Vec<Vec<i32>> {
let n = colsum.len();
let (mut upper, mut lower) = (upper, lower);
let mut res = vec![vec![0; n]; 2];
for (i, sum) in colsum.into_iter().enumerate() {
if upper + lower < sum { return Vec::new(); }
if sum == 2 {
if upper == 0 || lower == 0 { return Vec::new(); }
upper -= 1; lower -= 1;
res[0][i] = 1;
res[1][i] = 1;
}
else if sum == 1 {
if (lower > upper) { res[1][i] = 1; lower -= 1; }
else { res[0][i] = 1; upper -= 1; }
}
}
if lower > 0 || upper > 0 { return Vec::new(); }
res
}
}
标签:upper,lower,return,重构,res,sum,29,2023.6,Vec
From: https://www.cnblogs.com/st0rmKR/p/17513930.html