LeetCode 861. Score After Flipping Matrix
- Score After Flipping Matrix python solution
题目描述
We have a two dimensional matrix A where each value is 0 or 1.
A move consists of choosing any row or column, and toggling each value in that row or column: changing all 0s to 1s, and all 1s to 0s.
After making any number of moves, every row of this matrix is interpreted as a binary number, and the score of the matrix is the sum of these numbers.
Return the highest possible score.
解析
为了保障最终得到的数是最大的,那么最高位必须为1。所以首先进行操作,将每行的第一位都变为1,即toggle_row。然后对每列进行操作,统计每列中1出现的次数,若1出现的次数小于0出现的次数,进行列反转,toggle_col。
对行进行遍历可使用:
for i, row in enumerate(A):
对列进行遍历可使用:
for i,col in enumerate(zip(*A))
class Solution:
def matrixScore(self, A: List[List[int]]) -> int:
self.row = len(A)
self.col = len(A[0])
for i,row in enumerate(A):
if row[0]==0:self.toggle_row(A,i)
for i,col in enumerate(zip(*A)):
if col.count(1)<self.row/2:self.toggle_col(A,i)
return self.get_val(A)
def toggle_row(self,grid,x):
for i in range(self.col):
if grid[x][i]==1:grid[x][i]=0
else:grid[x][i]=1
def toggle_col(self,grid,x):
for i in range(self.row):
if grid[i][x]==1:grid[i][x]=0
else:grid[i][x]=1
def get_val(self,grid):
sum=0
for i in grid:
for a,b in enumerate (i[::-1]):
if b: sum+=2**a
return sum
Reference
https://leetcode.com/problems/score-after-flipping-matrix/discuss/327500/Python-100-speed