解题思路:
(1)首先确保第一列全为1
(2)确保剩余列中1的个数大于等于0的个数
class Solution {
public:
//交换行
void flip_row(vector<int> &A) {
for(int i=0;i<A.size();i++) {
A[i]=1-A[i];
}
}
//交换列
void flip_col(vector<vector<int>>& A, int j) {
for(int i=0;i<A.size();i++) {
A[i][j]=1-A[i][j];
}
}
int matrixScore(vector<vector<int>>& A) {
int m=A.size(),n=A[0].size();
int sum = 0,count=0;
for(int i=0;i<n;i++) {
count=0;
for(int j=0;j<m;j++) {
if(i==0 && A[j][i]==0) {
flip_row(A[j]);
sum+=pow(2,n-i-1);
} else if(i==0 && A[j][i]==1) {
sum+=pow(2,n-i-1);
} else if(A[j][i]==1) count++;
}
if(i==0) continue;
if(count<m-count) {
flip_col(A, i);
sum+=(m-count)*pow(2,n-i-1);
} else sum+=count*pow(2,n-i-1);
}
return sum;
}
};