LeetCode 861. Score After Flipping Matrix
考点 | 难度 |
---|---|
Greedy | Easy |
题目
You are given an m x n binary matrix grid.
A move consists of choosing any row or column and toggling each value in that row or column (i.e., changing all 0’s to 1’s, and all 1’s to 0’s).
Every row of the matrix is interpreted as a binary number, and the score of the matrix is the sum of these numbers.
Return the highest possible score after making any number of moves (including zero moves).
思路
先判断most significant bit(A[i][0])是不是1,如果不是需要flip。之后对每一个column数1和0的个数(需要考虑msb被flip过)如果0的个数更少需要flip。
答案
class Solution(object):
def matrixScore(self, A):
M, N = len(A), len(A[0])
res = (1 << N - 1) * M
for j in range(1, N):
cur = sum(A[i][j] == A[i][0] for i in range(M))
res += max(cur, M - cur) * (1 << N - 1 - j)
return res