LeetCode in Kotlin

2352. Equal Row and Column Pairs

Medium

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:

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:

Constraints:

Solution

class Solution {
    fun equalPairs(grid: Array<IntArray>): Int {
        val rows: MutableMap<Int, Int> = HashMap()
        for (i in grid.indices) {
            val hash = getRowHash(grid[i])
            rows[hash] = rows.getOrDefault(hash, 0) + 1
        }
        var count = 0
        for (i in grid.indices) {
            val hash = getColHash(grid, i)
            count += rows.getOrDefault(hash, 0)
        }
        return count
    }

    private fun getRowHash(grid: IntArray): Int {
        var res = 11
        for (i in grid) res = res * 11 + i
        return res
    }

    private fun getColHash(grid: Array<IntArray>, index: Int): Int {
        var res = 11
        for (i in grid.indices) {
            res = res * 11 + grid[i][index]
        }
        return res
    }
}