题目链接:861. 翻转矩阵后的得分
思路:给一个0-1矩阵,每行表示一个二进制数,要求翻转矩阵后的各行之和的值最高。那么只要保证矩阵每列中的1出现次数最多就行,对于第一列,应该通过翻转使它全部为1,然后对后面的矩阵列只要保证每列1出现的次数大于等于矩阵行数一半就行。
代码:
class Solution { public int matrixScore(int[][] A) { int sum = 0; for(int i=0; i<A.length; i++){ if(A[i][0] == 0) turnRow(A, i); sum += 1 << (A[0].length - 1); } for(int i=1; i<A[0].length; i++){ int t = 0; for(int j=0; j<A.length; j++){ t += A[j][i]; } t = t <= (A.length >> 1) ? A.length - t : t; sum += (1 << (A[0].length - i - 1)) * t; } return sum; } private void turnRow(int[][] A, int row){ for(int i=0; i<A[0].length; i++){ A[row][i] = A[row][i] == 1 ? 0 : 1; } } }