题目链接及描述
题目分析
最近几日在刷哈希表类型的题目,遇到了上面这道题目,我本身以为是要构建一个哈希表key、value分别为行、列,随后根据已有的map中的key、value步步迭代,将二维数组遍历完,能够求解题目需要的结果。随后编写的时候不仅比较难以实现,而且貌似有坑。所以查看了题解。
题解中的做法非常通俗易懂,分为两步:
- 遍历二维数组的每一行,将每一行中的所有元素构建一个String字符串,将其作为key存入特定的map表中。value为特定的key(String)出现的次数。
- 遍历二维数组的每一列,将每一列中的所有元素构建一个String字符串,之后根据此key去map表中查找对应的value,随后将每一列查找得到的结果相加即为最终答案。
遍历每一行根据其对应元素构建String比较简单,遍历每一列根据所有元素构建String可能有一点困难,参考实现如下;
for(int j = 0; j < grid.length; j++){ StringBuilder sb = new StringBuilder(); for(int[] arr : grid){ sb.append(arr[j]).append("#"); } String temp = sb.toString(); }
代码编写
class Solution {
public int equalPairs(int[][] grid) {
Map<String, Integer> map = new HashMap<>();
// 将每一行转化为String的形式,并将其插入map中,key为String,value为个数
for(int[] arr : grid){
StringBuilder sb = new StringBuilder();
for(int num : arr){
sb.append(num).append("#");
}
String temp = sb.toString();
map.put(temp, map.getOrDefault(temp, 0) + 1);
}
int ans = 0;
for(int j = 0; j < grid.length; j++){
StringBuilder sb = new StringBuilder();
for(int[] arr : grid){
sb.append(arr[j]).append("#");
}
String temp = sb.toString();
ans += map.getOrDefault(temp, 0);
}
return ans;
}
}