Loading

Leetcode861.翻转矩阵后的得分

题目链接: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;
        }
    }
}

 

posted @ 2020-12-07 10:36  yoyuLiu  阅读(109)  评论(0编辑  收藏  举报