---
# System prepended metadata

title: 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
tags: [Leetcode, Hard, Backtracking]

---

# 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
###### tags: `Leetcode` `Hard` `Backtracking`
Link: https://leetcode.com/problems/minimum-number-of-flips-to-convert-binary-matrix-to-zero-matrix/description/
## 思路
backtracking 
穷举每个元素是否flip
## Code
```java=
class Solution {
    public int minFlips(int[][] mat) {
        int m = mat.length, n = mat[0].length;
        int ans = Integer.MAX_VALUE;
        for(int state=0; state<(1<<(m*n)); state++){
            if(check(state, mat)){
                ans = Math.min(ans, Integer.bitCount(state));
            }
        }
        if(ans==Integer.MAX_VALUE) return -1;
        return ans;
    }
    private boolean check(int state, int[][] mat){
        int m = mat.length, n = mat[0].length;
        int[][] dirs = new int[][]{{1,0},{-1,0},{0,1},{0,-1},{0,0}};
        int[][] temp = new int[m][n];
        for(int i=0; i<m; i++) temp[i] = mat[i].clone();
        
        for(int s=0; s<m*n; s++){
            if(((state>>s)&1)==0) continue;
            int i = s/n;
            int j = s%n;
            for(int[] dir:dirs){
                int nextx = i+dir[0], nexty = j+dir[1];
                if(nextx>=0 && nextx<m && nexty>=0 && nexty<n){
                    temp[nextx][nexty] = 1-temp[nextx][nexty];
                }
            }
        }
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(temp[i][j]!=0) return false;
            }
        }
        return true;
    }
}
```