Problem: 861. Score After Flipping Matrix 翻转矩阵后的得分
解题过程
耗时100%,首先判断某一行的第一列是否是0,若grid[i][0]==0,则翻转该行;然后计数每一列的1的个数,若1的个数<行数的一半, 则翻转该列,最后得到结果
Code
class Solution { public: int matrixScore(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); for(int i = 0; i < m; i++) { if(grid[i][0] == 0) { for(int j = 0; j < n; j++) { grid[i][j] = (grid[i][j] ^ 1); } } } float half = m / (float)2.0f; for(int j = 0; j < n; j++) { float sum = 0; for(int i = 0; i < m; i++) { sum += grid[i][j]; } if(sum < half) { for(int i = 0; i < m; i++) { grid[i][j] = (grid[i][j] ^ 1); } } } int ans = 0; for(int i = 0; i < m; i++) { int s = 0; for(int j = 0; j < n; j++) { if(grid[i][j] == 1) { s += (1 << (n - j - 1)); } } ans += s; } return ans; } };