2352.Equal Row and Column Pairs
===
###### tags: `Medium`,`Array`,`Hash Table`,`Matrix`,`Simulation`
[2352. Equal Row and Column Pairs](https://leetcode.com/problems/equal-row-and-column-pairs/)
### 題目描述
Given a **0-indexed** `n x n` integer matrix `grid`, *return the number of pairs `(ri, cj)` such that row `ri` and column `cj` are equal*.
A row and column pair is considered equal if they contain the same elements in the same order (i.e., an equal array).
### 範例
**Example 1:**
![](https://assets.leetcode.com/uploads/2022/06/01/ex1.jpg)
```
Input: grid = [[3,2,1],[1,7,6],[2,7,7]]
Output: 1
Explanation: There is 1 equal row and column pair:
- (Row 2, Column 1): [2,7,7]
```
**Example 2:**
![](https://assets.leetcode.com/uploads/2022/06/01/ex2.jpg)
```
Input: grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
Output: 3
Explanation: There are 3 equal row and column pairs:
- (Row 0, Column 0): [3,1,2,2]
- (Row 2, Column 2): [2,4,2,2]
- (Row 3, Column 2): [2,4,2,2]
```
**Constraints**:
* n == grid.length == grid[i].length
* 1 <= n <= 200
* 1 <= `grid[i][j]` <= 10<sup>5</sup>
### 解答
#### Python
```python=
class Solution:
def equalPairs(self, grid: List[List[int]]) -> int:
d = defaultdict(int)
ans = 0
for row in grid:
d[str(row)] += 1
for col in map(list, zip(*grid)):
ans += d[str(col)]
return ans
```
> [name=Yen-Chi Chen][time=Wed, Jun 14, 2023]
#### TypeScript
```typescript=
function equalPairs(grid: number[][]): number {
const n = grid.length;
const rows = new Map<string, number>();
const cols = new Map<string, number>();
for (let i = 0; i < n; i++) {
const row = grid[i].join(',');
const col = grid.map((row) => row[i]).join(',');
rows.set(row, (rows.get(row) || 0) + 1);
cols.set(col, (cols.get(col) || 0) + 1);
}
let count = 0;
for (const [key, value] of rows.entries()) {
count += value * (cols.get(key) || 0);
}
return count;
}
```
> [name=Sheep][time=Wed, Jun 14, 2023]
#### C#
```csharp=
public class Solution {
public int EqualPairs(int[][] grid) {
int n = grid.Length;
var dic = new Dictionary<string, int>();
for (int i = 0; i < n; i++) {
string key = string.Join('-', grid[i]);
dic.TryGetValue(key, out int count);
dic[key] = count + 1;
}
int total = 0;
for (int j = 0; j < n; j++) {
string key = string.Join('-', grid.Select(row => row[j]));
if (dic.TryGetValue(key, out int count)) {
total += count;
}
}
return total;
}
}
```
>[name=Jim][time=Jun 14, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)