被列覆盖的最多行数
题目描述
简单来说就是:选中的列,所有的1都会变成0,返回得到全是0的行最多是多少。
示例
官解(二进制枚举)
class Solution {
public int maximumRows(int[][] matrix, int numSelect) {
int m = matrix.length;
int n = matrix[0].length;
int[] mask = new int[m];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
mask[i] += matrix[i][j] << (n - j - 1);
//将matrix[i][j]向左移(n - j - 1),用第几位表示第几列有1
}
}
int res = 0;
int cur = 0;
int limit = (1 << n);
while(++cur <= limit) {
if(Integer.bitCount(cur) != numSelect) {
//Integer.bitCount()方法用于统计二进制中1的个数
continue; //如果1的个数 != numSelect 直接下一次循环,1的个数代表选择的列数
}
int t = 0;
for(int j = 0; j < m; j++) {
if((mask[j] & cur) == mask[j]) {
// == 代表覆盖了,该行都为0
t++;
}
}
res = Math.max(res, t);
}
return res;
}
}