Remove All Ones With Row and Column Flips
翻一个只有0和1的矩阵, 只能翻一个行或者一个列. 返回能不能翻成全1或者全0矩阵.
这题只需要判断第一行, 见到0不动, 见到1翻过来,这样第一行就是全0. 然后通过判断其他行是不是全1或者全0, 即可知道答案.
证: 如果第一行已经全0, 其他某行, 非全1或者全0, 那么这行通过行翻转, 肯定不能得到全1或者全0, 但是通过列翻转, 又破坏第一行的全0,故此.
class Solution {
public boolean removeOnes(int[][] grid) {
int n = grid.length;
int m = grid[0].length;
for(int i = 0; i < n; i++) {
if(i == 0){ // if first row
for(int j = 0; j < m; j++) {
if(grid[i][j] == 0){
for(int k = 0; k < n; k++){
flip(grid, k, j);
}
}
}
}
else
{
for(int j = 1; j < m; j++) {
if(grid[i][j] != grid[i][j - 1])
return false;
}
}
}
return true;
}
public void flip(int[][] grid, int i, int j){
if(grid[i][j] == 0)
grid[i][j] = 1;
else
grid[i][j] = 0;
}
}