1886. Determine Whether Matrix Can Be Obtained By Rotation

QUESTION:

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:

n == mat.length == target.length
n == mat[i].length == target[i].length
1 <= n <= 10
mat[i][j] and target[i][j] are either 0 or 1.

EXPLANATION:

通过观察我们可以看到规律, 也就是将每一竖排反向后再横着就是最终的旋转90度. 那么就很容易了, 只需要旋转4次即可.每次判断是否相同即可完成.

SOLUTION:

class Solution {
    func findRotation(_ mat: [[Int]], _ target: [[Int]]) -> Bool {
        var mat = mat
        for _ in 1...5 {
            if mat == target {
                return true
            }
            mat = rotation90(mat)
        }
        return false
    }

    func rotation90(_ mat: [[Int]]) -> [[Int]] {
        var result: [[Int]] = []
        for indexI in mat.indices {
            var tmpArr: [Int] = []
            for indexJ in mat[indexI].indices {
                tmpArr.append(mat[indexJ][indexI])
            }
            result.append(tmpArr.reversed())
        }
        return result
    }
}