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; } };