[leetcode]Score After Flipping Matrix
链接:https://leetcode.com/problems/score-after-flipping-matrix/description/
Question
We have a two dimensional matrix A
where each value is 0
or 1
.
A move consists of choosing any row or column, and toggling each value in that row or column: changing all 0
s to 1
s, and all 1
s to 0
s.
After making any number of moves, every row of this matrix is interpreted as a binary number, and the score of the matrix is the sum of these numbers.
Return the highest possible score.
Example 1
Input: [[0,0,1,1],[1,0,1,0],[1,1,0,0]]
Output: 39
Explanation:
Toggled to [[1,1,1,1],[1,0,0,1],[1,1,1,1]].
0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39
Note:
1 <= A.length <= 20
1 <= A[0].length <= 20
A[i][j] is 0 or 1.
Solution
// 想法是先通过toggle每一个row让每一行的第一个数字是1,然后逐行toggle后面的每一列,让每一列的1最多
class Solution {
public:
int matrixScore(vector<vector<int>>& A) {
int row = A.size();
int col = A[0].size();
int cnt = 0;
for (int i = 0; i < row; i++) {
if (A[i][0] == 0) {
for (int j = 0; j < col; j++) {
A[i][j] = !A[i][j];
}
}
cnt += (1 << (col-1));
}
for (int j = 1; j < col; j++) {
int zeros = 0, ones = 0;
for (int i = 0; i < row; i++) {
if (A[i][j] == 0) zeros++;
else ones++;
}
int max_val = max(zeros, ones);
cnt += (1 << (col-j-1))*max_val;
}
return cnt;
}
};
思路:看代码注释~