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)