从Leetcode 每日一题练习继续讨论:
1605. 给定行和列的和求可行矩阵
1605. Find Valid Matrix Given Row and Column Sums
题解
本题使用贪心算法, 在填充每一行的数字时, 每次都取当前位置行和和列和的较小值. 再分别从行和和列和中减去当前取的值. 继续填充下一个位置的数字. 这样可以保证填充的每个数字都不会使当前行和列超过和的限制(实际按这个思路只要取小于等于二者较小值即可), 直接取二者中的较小值可以保证二者中的一个变为0. 避免了后续继续填充时可能会因行或列的和的限制而无法取得合适的数的问题(0对和没有影响). 而当和为0时只需将该位置填充为0即可.
代码
func restoreMatrix(rowSum []int, colSum []int) [][]int {
result := [][]int{}
collen := len(colSum)
rowlen := len(rowSum)
for i:=0;i<rowlen;i++{
temprow := []int{}
for j:=0;j<collen;j++{
current := min(rowSum[i],colSum[j])
temprow = append(temprow, current)
rowSum[i] -= current
colSum[j] -= current
}
result = append(result, temprow)
}
return result
}