LeetCode in Kotlin

1814. Count Nice Pairs in an Array

Medium

You are given an array nums that consists of non-negative integers. Let us define rev(x) as the reverse of the non-negative integer x. For example, rev(123) = 321, and rev(120) = 21. A pair of indices (i, j) is nice if it satisfies all of the following conditions:

Return the number of nice pairs of indices. Since that number can be too large, return it modulo 109 + 7.

Example 1:

Input: nums = [42,11,1,97]

Output: 2

Explanation: The two pairs are:

Example 2:

Input: nums = [13,10,35,24,76]

Output: 4

Constraints:

Solution

@Suppress("NAME_SHADOWING")
class Solution {
    private fun rev(n: Int): Int {
        var n = n
        var r = 0
        while (n > 0) {
            r = r * 10 + n % 10
            n /= 10
        }
        return r
    }

    fun countNicePairs(nums: IntArray): Int {
        val revMap = HashMap<Int, Int>()
        var cnt = 0
        for (num in nums) {
            val lhs = num - rev(num)
            val prevCnt = revMap.getOrDefault(lhs, 0)
            cnt += prevCnt
            val mod = 1000000007
            cnt %= mod
            revMap[lhs] = prevCnt + 1
        }
        return cnt
    }
}