2023-06-06 LeetCode每日一题(相等行列对)

2023-06-06每日一题

一、题目编号

2352. 相等行列对

二、题目链接

点击跳转到题目位置

三、题目描述

给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。

如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。

提示:

  • n == grid.length == grid[i].length
  • 1 <= n <= 200
  • 1 <= grid[i][j] <= 105

四、解题代码

class Solution {
    unordered_map<string, int> hash;
public:
    int equalPairs(vector<vector<int>>& grid) {
        int m = grid.size();
        for(int i = 0; i < m; ++i){
            string s;
            for(int j = 0; j < m; ++j){
                s += to_string(grid[i][j]) ;
                s += '-';
            }
            hash[s]++;
        }
        int cnt = 0;
        for(int i = 0; i < m; ++i){
            string s;
            for(int j = 0; j < m; ++j){
                s += to_string(grid[j][i]) ;
                s += '-';
            }
            cnt += hash[s];
        }
    return cnt;
    }
};

五、解题思路

(1) 这道题目的实质,就是要找行和列元素顺序相同的个数。那么我们先用哈希表去统计每一列的元素顺序,用字符串来统计,比如第一列是1 3 10这三个数字,那么用哈希表统计的字符串是“1-3-10-”这样的形式。(这个与二叉树的遍历序列类似,具体情况以后遇到再谈)。

(2) 那么统计过一轮后,哈希表已经统计了每一列的字符串的数目了。那么接下来统计每一行。我们故技重施,得到每一行的字符串形式为s,那么每次统计哈希表中的hash[s]有多少个,有多少个,结果就加上多少个。

(3) 最后返回结果即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值