目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
给你一个下标从 0 开始、大小为 n x n
的整数矩阵 grid
,返回满足 Ri
行和 Cj
列相等的行列对 (Ri, Cj)
的数目。
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
示例 1:
输入:grid = [[3,2,1],[1,7,6],[2,7,7]] 输出:1 解释:存在一对相等行列对: - (第 2 行,第 1 列):[2,7,7]
示例 2:
输入:grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]] 输出:3 解释:存在三对相等行列对: - (第 0 行,第 0 列):[3,1,2,2] - (第 2 行, 第 2 列):[2,4,2,2] - (第 3 行, 第 2 列):[2,4,2,2]
提示:
n == grid.length == grid[i].length
1 <= n <= 200
1 <= grid[i][j] <= 105
解题思路:
/**
* 首先把每一行的值拼凑成一个string字符串,加入set
* 然后遍历每一列,每一列也拼凑成一个字符串,查看set中是否含有,如果含有,则次数num+1
*/
代码:
#include <iostream>
#include <map>
#include <list>
#include <vector>
#include <set>
#include <algorithm>
#include "Solution2352.h"
string getKey(vector<int> &line)
{
string str;
for (int i = 0; i < line.size(); i++)
{
str.append(to_string(line[i]));
str.append("_");
}
return str;
}
/**
* 首先把每一行的值拼凑成一个string字符串,加入set
* 然后遍历每一列,每一列也拼凑成一个字符串,查看set中是否含有,如果含有,则次数num+1
*/
int Solution2352::equalPairs(vector<vector<int>> &grid)
{
int num = 0;
map<string, int> map;
for (int i = 0; i < grid.size(); i++)
{
map[getKey(grid[i])]++;
}
for (int i = 0; i < grid.size(); i++)
{
string str;
for (int j = 0; j < grid.size(); j++)
{
str.append(to_string(grid[j][i]));
str.append("_");
}
int add = map[str];
num = num + add;
}
return num;
};