861. 翻转矩阵后的得分
思路
先对行进行变换,保证第一列的数字全都为1,然后对列进行变换,让每一列的1的个数都大于0的个数。
然后遍历每一列,如果行首是1,对应位置的数不变,如果是0,对应位置是数就变,对列求和,看1多还是0多,再将这列的值加入到结果中去。
代码
class Solution {
public:
int matrixScore(vector<vector<int>>& A) {
int m = A.size();
int n = A[0].size();
int res = m * (1 << (n-1));
for(int j =1; j<n;j++){
int nums = 0;
for(int i =0;i<m;i++){
if(A[i][0] == 1){
nums += A[i][j];
}else{
nums += (1-A[i][j]);
}
}
int k = max(nums,m -nums);
res += k*(1<< (n-1-j));
}
return res;
}
};