Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/2352.html

2352. Equal Row and Column Pairs

  • Difficulty: Medium.
  • Related Topics: Array, Hash Table, Matrix, Simulation.
  • Similar Questions: .

Problem

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:

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:

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] <= 105

Solution (Java, C++, Python)

  • class Solution {
        public int equalPairs(int[][] grid) {
            int[] tmpCol = new int[grid.length];
            Map<Integer, Integer> pairsMap = new HashMap<>();
            int pairsCounter = 0;
            for (int col = 0; col < grid[0].length; col++) {
                for (int row = 0; row < grid.length; row++) {
                    tmpCol[row] = grid[row][col];
                }
                int hashCode = Arrays.hashCode(tmpCol);
                pairsMap.put(hashCode, pairsMap.getOrDefault(hashCode, 0) + 1);
            }
            for (int[] row : grid) {
                int hashCode = Arrays.hashCode(row);
                if (pairsMap.containsKey(hashCode)) {
                    pairsCounter += pairsMap.get(hashCode);
                }
            }
            return pairsCounter;
        }
    }
    
    ############
    
    class Solution {
        public int equalPairs(int[][] grid) {
            int n = grid.length;
            int[][] g = new int[n][n];
            for (int j = 0; j < n; ++j) {
                for (int i = 0; i < n; ++i) {
                    g[i][j] = grid[j][i];
                }
            }
            int ans = 0;
            for (var row : grid) {
                for (var col : g) {
                    int ok = 1;
                    for (int i = 0; i < n; ++i) {
                        if (row[i] != col[i]) {
                            ok = 0;
                            break;
                        }
                    }
                    ans += ok;
                }
            }
            return ans;
        }
    }
    
  • class Solution:
        def equalPairs(self, grid: List[List[int]]) -> int:
            g = [list(col) for col in zip(*grid)]
            return sum(row == col for row in grid for col in g)
    
    ############
    
    # 2352. Equal Row and Column Pairs
    # https://leetcode.com/problems/equal-row-and-column-pairs/
    
    class Solution:
        def equalPairs(self, grid: List[List[int]]) -> int:
            rows, cols = len(grid), len(grid[0])
            R = Counter()
            C = Counter()
            
            for row in grid:
                R[tuple(row)] += 1
            
            for col in zip(*grid):
                C[tuple(col)] += 1
            
            res = 0
            for row, cnt in R.items():
                res += cnt * C[row]
            
            return res
    
    
  • class Solution {
    public:
        int equalPairs(vector<vector<int>>& grid) {
            int n = grid.size();
            vector<vector<int>> g(n, vector<int>(n));
            for (int j = 0; j < n; ++j) {
                for (int i = 0; i < n; ++i) {
                    g[i][j] = grid[j][i];
                }
            }
            int ans = 0;
            for (auto& row : grid) {
                for (auto& col : g) {
                    ans += row == col;
                }
            }
            return ans;
        }
    };
    
  • func equalPairs(grid [][]int) (ans int) {
    	n := len(grid)
    	g := make([][]int, n)
    	for i := range g {
    		g[i] = make([]int, n)
    		for j := 0; j < n; j++ {
    			g[i][j] = grid[j][i]
    		}
    	}
    	for _, row := range grid {
    		for _, col := range g {
    			ok := 1
    			for i, v := range row {
    				if v != col[i] {
    					ok = 0
    					break
    				}
    			}
    			ans += ok
    		}
    	}
    	return
    }
    
  • function equalPairs(grid: number[][]): number {
        const n = grid.length;
        const g = Array.from({ length: n }, () =>
            Array.from({ length: n }, () => 0),
        );
        for (let j = 0; j < n; ++j) {
            for (let i = 0; i < n; ++i) {
                g[i][j] = grid[j][i];
            }
        }
        let ans = 0;
        for (const row of grid) {
            for (const col of g) {
                ans += Number(row.toString() === col.toString());
            }
        }
        return ans;
    }
    
    

Explain:

nope.

Complexity:

  • Time complexity : O(n).
  • Space complexity : O(n).

All Problems

All Solutions