📅  最后修改于: 2023-12-03 15:41:36.364000             🧑  作者: Mango
给定一个二维矩阵,其中每个位置要么是 0,要么是 1。我们希望在这个矩阵中,每一行和每一列的 1 的数量相等。
我们可以任意地增加 1 的数量,但是不能删除任何的 1。
请编写一个函数,判断是否可以通过上述方式完成对该矩阵的更改。
def modify_matrix(matrix):
n = len(matrix)
m = len(matrix[0])
row_sum = [sum(matrix[i]) for i in range(n)]
col_sum = [sum([matrix[i][j] for i in range(n)]) for j in range(m)]
target = sum(row_sum) // (n + m)
for i in range(n):
diff = target - row_sum[i]
for j in range(m):
if diff == target - col_sum[j]:
row_sum[i] += diff
col_sum[j] += diff
matrix[i][j] += diff
return all(x == target for x in row_sum) and all(x == target for x in col_sum)
# 测试样例
print(modify_matrix([[0, 1, 0], [1, 0, 1], [0, 1, 0]])) # True
print(modify_matrix([[0, 1], [1, 0]])) # False
print(modify_matrix([[1, 1], [1, 0]])) # False
代码的描述如下:
row_sum
是一个长度为 n 的列表,表示每一行 1 的数量,使用列表解析式计算。col_sum
是一个长度为 m 的列表,表示每一列 1 的数量,使用生成器表达式计算。target
表示矩阵中每行和每列 1 的数量应该达到的值。diff
,如果 diff
等于当前列和当前行的数量之差,说明可以修改当前位置,进行修改。