题目地址

思路:每次翻转一整列,然后经过N次翻转后,统计行数(一行中每个字母相同)。当存在规律相同的行的时候则相同列反转后都会变成字母相同例如(1010和0101,翻转后会变成1111,0000)。因此处理方法是找到矩阵中规律相同的行数;可以通过map key进行统计

class Solution {
    public int maxEqualRowsAfterFlips(int[][] matrix) {
        if (matrix.length == 0 || matrix[0].length == 0) return 0;

        // 列反转后,行值相等,求取最大行数
        // 实际上可以理解为存在相同的规律的行最大有多少(相同规律指的是,1010,0101,这两种为相同规律)   
        Map<String,Integer> countMap = new HashMap();
        for (int[] row : matrix) {
            StringBuilder sb = new StringBuilder();
            // 首位为0 ,直接添加,否则进行置反,使其统一
            if (row[0] == 1) {
                for(int num : row) {
                    sb.append(1 - num);
                }
            } else {
                 for(int num : row) {
                    sb.append(num);
                }
            }
            String key = sb.toString();
            countMap.put(key, countMap.getOrDefault(key,0) + 1);
        }

        int max = 0;
        for (int m : countMap.values()) {
            max = Math.max(max,m);
        }
        return max;
    }
}


Q.E.D.


每一个平凡的日常都是连续的奇迹