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;
    }
   
}