给你一个下标从 0
开始、大小为 n x n
的整数矩阵 grid
,返回满足 Ri
行和 Cj
列相等的行列对 (Ri, Cj)
的数目。
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
题目链接:https://leetcode.cn/problems/equal-row-and-column-pairs/
# 解题思路
hash 计数:
- 将行、列转换成数字字符串(用分隔符‘#’连接),如此可以得到唯一的 key
- 遍历每一行,建立数字字符串的 hash 计数表
- 再遍历每一列,统计相等的数字字符串,累加到答案即可
# 提交结果
# 代码
class Solution { | |
public int equalPairs(int[][] grid) { | |
int n = grid.length; | |
Map<String, Integer> rowMap = new HashMap<>(); | |
for (int[] g : grid) { | |
StringBuilder sb = new StringBuilder(); | |
for (int j = 0; j < n; ++j) { | |
sb.append(g[j]).append('#'); | |
} | |
String k = sb.toString(); | |
rowMap.put(k, rowMap.getOrDefault(k, 0) + 1); | |
} | |
int ret = 0; | |
for (int j = 0; j < n; ++j) { | |
StringBuilder sb = new StringBuilder(); | |
for (int i = 0; i < n; ++i) { | |
sb.append(grid[i][j]).append('#'); | |
} | |
ret += rowMap.getOrDefault(sb.toString(), 0); | |
} | |
return ret; | |
} | |
} |