1. 程式人生 > 實用技巧 >LeetCode 1072. 按列翻轉得到最大值等行數

LeetCode 1072. 按列翻轉得到最大值等行數

給定由若干 0 和 1 組成的矩陣 matrix,從中選出任意數量的列並翻轉其上的 每個 單元格。翻轉後,單元格的值從 0 變成 1,或者從 1 變為 0 。
返回經過一些翻轉後,行上所有值都相等的最大行數。

示例 1:
輸入:[[0,1],[1,1]]
輸出:1
解釋:不進行翻轉,有 1 行所有值都相等。

示例 2:
輸入:[[0,1],[1,0]]
輸出:2
解釋:翻轉第一列的值之後,這兩行都由相等的值組成。

示例 3:
輸入:[[0,0,0],[0,0,1],[1,1,0]]
輸出:2
解釋:翻轉前兩列的值之後,後兩行由相等的值組成。

提示:
1 <= matrix.length <= 300
1 <= matrix[i].length <= 300
所有 matrix[i].length 都相等
matrix[i][j] 為 0 或 1

class Solution:
    def maxEqualRowsAfterFlips(self, matrix: List[List[int]]) -> int:
        counter_dic = dict()
        maxCount = 0
        for row in matrix:
            if row[0] == 1:
                tup_row = tuple(1-x for x in row)
            else:
                tup_row = tuple(row)
            # 把tuple_row存在字典裡
            if tup_row in counter_dic:
                counter_dic[tup_row] += 1
            else:
                counter_dic[tup_row] = 1
        # 遍歷找到最大值
        for count in counter_dic.values():
            maxCount = max(maxCount, count)
        return maxCount