题目链接及描述

. – 力扣(LeetCode). – 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)插图http://leetcode.cn/problems/equal-row-and-column-pairs/description/?envType=study-plan-v2&envId=leetcode-75

哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)插图(1)

题目分析

        最近几日在刷哈希表类型的题目,遇到了上面这道题目,我本身以为是要构建一个哈希表key、value分别为行、列,随后根据已有的map中的key、value步步迭代,将二维数组遍历完,能够求解题目需要的结果。随后编写的时候不仅比较难以实现,而且貌似有坑。所以查看了题解。

        题解中的做法非常通俗易懂,分为两步:

  1. 遍历二维数组的每一行,将每一行中的所有元素构建一个String字符串,将其作为key存入特定的map表中。value为特定的key(String)出现的次数。
  2. 遍历二维数组的每一列,将每一列中的所有元素构建一个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 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;
    }
}

参考链接

. – 力扣(LeetCode)

本站无任何商业行为
个人在线分享 » 哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)
E-->