题目:
给定 m x n 矩阵 matrix 。
你可以从中选出任意数量的列并翻转其上的 每个 单元格。(即翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。)
返回 经过一些翻转后,行与行之间所有值都相等的最大行数 。
算法:
方法一:hash table
思路:
矩阵1:
0 1
1 0
矩阵2:
0 1 0
1 0 1
0 1 0
矩阵3:
1 0 1
1 0 1
1 0 1
可以通过翻转列达到每行相等。
这两个矩阵的特征是什么?行a ^ 行b == 全1
func maxEqualRowsAfterFlips(matrix [][]int) int {
ans := 0
m := make(map[string]int)
for i := range matrix {
str := ""
for j := range matrix[i] {
if matrix[i][0] == 1 {
str = str + fmt.Sprintf("%d", matrix[i][j] ^ 1)
} else {
str = str + fmt.Sprintf("%d", matrix[i][j])
}
}
m[str] ++
if m[str] > ans {
ans = m[str]
}
}
return ans
}
用字典树代替hash table也可以,关键是找到什么样的行能通过翻转列能使“行与行之间所有值相等”