> For the complete documentation index, see [llms.txt](https://timmybeeflin.gitbook.io/cracking-leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://timmybeeflin.gitbook.io/cracking-leetcode/math/2128.-remove-all-ones-with-row-and-column-flips.md).

# 2128. Remove All Ones With Row and Column Flips

```
in row flips or col flips

want all zeros, only happen in only has two patterns in a matrix

normal or reverse pattern, just 2 patterns
```

```
T: O(mn)
S: O(1)
```

```java
class Solution {
    public boolean removeOnes(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        if (grid.length == 1) {
            return true;
        }
        
        // get first row's string, and reverse string
        StringBuilder first = new StringBuilder();
        StringBuilder firstReverse = new StringBuilder();
        for (int col = 0; col < n; col++) {
            first.append(grid[0][col]);
            firstReverse.append(1 - grid[0][col]);
        }

        // validate other rows string, is equal to (first row's string, or reverse string)
        // if not return false
        for (int i = 1; i < m; i++) {
            StringBuilder str = new StringBuilder();
            for (int j = 0; j < n; j++) {
                str.append(grid[i][j]);
            }

            String cur = str.toString();
            if (!cur.equals(first.toString()) && !cur.equals(firstReverse.toString())) {
                return false;
            }
        }
        return true;
    }
}

/*
Return true if it is possible to remove all 1's from grid using any number of operations or false otherwise.


110 -> 001

010
101

110
001
010

row flips or col flips

want all zeros, only happen in only has two patter in a matrix

normal or reverse pater, just 2

T: O(mn)
S: O(1)

*/
```
