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) 最后返回结果即可。