答案仿写LeetCode官方题解
1.通过行列反转确保每一行第一个数必定是1。
2.统计出除第一列意外的所有列1的数量,若当前列1的数量小于0的数量,着通过列反转使1的数量大于0。
class Solution {
public:
int matrixScore(vector<vector<int>>& A) {
if(A.empty()) return 0;
int res = 0;
int m = A.size(),n = A[0].size();
res = m * (1 << (n-1));// 1每左移一次就相当乘一次2,计算出第一列全是中全是1第一列转为十进制后的总和
for(int j = 1;j < n;++j){
int count = 0;
for(int i = 0;i < m;++i){
if(A[i][0] == 1 && A[i][j] == 1){
//根据第一列是否为1判断当前行是否反转
++count;
}else if(A[i][0] == 0 && A[i][j] == 0){
++count;
}
}
int k = max(count,m-count);
res += (k*(1 << (n-1-j)));
}
return res;
}
};