leetcode 861 翻转矩阵后的得分

1. 题目描述

 2.思路分析:

1. 首先这里的翻转分为了行翻转和列翻转,我们这里只需要求如何翻转后得到最大值,有点贪心的思想,因为最大值一定是固定的

至于是什么路径到达的最大值不是我们所关心的,我们直接从最大的角度去考虑,为了最大,那么首先保证的是每行的第一列为1

,如果有哪个行的第一列不为1的话,那么就行翻转下,然后剩下就是列的问题,第一列已经被固定了,所以就不需要被考虑了,所以

直接从第二列开始考虑,从第二列开始就是比较1和0的个数谁更多了,如果0多的话,就需要列翻转了,大体思路就是这样

至于题解的代码写的比较省略,主要体现到那个最大值的比较,那个其实就是行翻转,因为比较了0和1的个数,返回值其实就是翻转后的结果了

3.代码

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) {
        int m=A.size(),n=A[0].size(); //行数
        int ret=m*(1<<(n-1));
        for(int j=1;j<n;j++)
        {
            int tmp=0;
            for(int i=0;i<m;i++)
            {
                if(A[i][0]==1)
                {
                    tmp+=A[i][j];
                }else
                {
                    tmp+=(1-A[i][j]);
                }
            }
            int k1=max(tmp,m-tmp);
            ret+=k1*(1<<(n-j-1));
        }
        return ret;
    }
};
原文地址:https://www.cnblogs.com/YenKoc/p/14100297.html