LeetCode in Kotlin

1886. Determine Whether Matrix Can Be Obtained By Rotation

Easy

Given two n x n binary matrices mat and target, return true if it is possible to make mat equal to target by rotating mat in 90-degree increments, or false otherwise.

Example 1:

Input: mat = [[0,1],[1,0]], target = [[1,0],[0,1]]

Output: true

Explanation: We can rotate mat 90 degrees clockwise to make mat equal target.

Example 2:

Input: mat = [[0,1],[1,1]], target = [[1,0],[0,1]]

Output: false

Explanation: It is impossible to make mat equal to target by rotating mat.

Example 3:

Input: mat = [[0,0,0],[0,1,0],[1,1,1]], target = [[1,1,1],[0,1,0],[0,0,0]]

Output: true

Explanation: We can rotate mat 90 degrees clockwise two times to make mat equal target.

Constraints:

Solution

class Solution {
    fun findRotation(mat: Array<IntArray>, target: Array<IntArray>): Boolean {
        for (i in 0..3) {
            if (mat.contentDeepEquals(target)) {
                return true
            }
            rotate(mat)
        }
        return false
    }

    private fun rotate(mat: Array<IntArray>) {
        // Reverse Rows
        run {
            var i = 0
            var j = mat.size - 1
            while (i < j) {
                val tempRow = mat[i]
                mat[i] = mat[j]
                mat[j] = tempRow
                i++
                j--
            }
        }
        // Transpose
        for (i in mat.indices) {
            for (j in i + 1 until mat.size) {
                val temp = mat[i][j]
                mat[i][j] = mat[j][i]
                mat[j][i] = temp
            }
        }
    }
}