class Solution:
def matrixScore(self, A: List[List[int]]) -> int:
#未优化
if not A:
return 0
row,col = len(A),len(A[0])
#保证第一列都是1
for i in range(row):
if A[i][0]==0:
for j in range(col):
if A[i][j]==0:
A[i][j]=1
else:
A[i][j]=0
for i in range(1,col):
one=0
for j in range(row):
if A[j][i]==1:
one+=1
if one<row-one:
for j in range(row):
if A[j][i]==0:
A[j][i]=1
else:
A[j][i]=0
res=0
for row in A:
row = ''.join([str(i) for i in row])
res+=int(row,2)
return res
#优化
if not A:
return 0
score=0
row,col = len(A),len(A[0])
#保证第一列都是1
for i in range(row):
if A[i][0]==0:
for j in range(col):
if A[i][j]==0:
A[i][j]=1
else:
A[i][j]=0
score = 2**(col-1)*row
for i in range(1,col):
one=0
for j in range(row):
if A[j][i]==1:
one+=1
one = max(one,row-one)
score+=2**(col-i-1)*one
return score
- 保证第一列全部为1
- 保证第二列后的每一列的1的个数大于0的个数,否则就翻转
- 两种方法:
- 修改原矩阵
- 笨方法,空间复杂度高
- 不修改原矩阵
- 处理第一列修改其余不修改
- 计算每列的贡献度即可
- 修改原矩阵
总结:计算二进制最大值,必须保证靠左边的1越来越多。