1886. Determine Whether Matrix Can Be Obtained By Rotation

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`.

1886. Determine Whether Matrix Can Be Obtained By Rotation
``````struct Solution;

trait Rotation {
fn rotate(self) -> Vec<Vec<i32>>;
}

impl Rotation for Vec<Vec<i32>> {
fn rotate(self) -> Vec<Vec<i32>> {
let n = self.len();
let mut mat: Vec<Vec<i32>> = vec![vec![0; n]; n];
for i in 0..n {
for j in 0..n {
mat[j][n - 1 - i] = self[i][j];
}
}
mat
}
}

impl Solution {
fn find_rotation(mat: Vec<Vec<i32>>, target: Vec<Vec<i32>>) -> bool {
if mat == target {
return true;
}
let mat90 = mat.rotate();
if mat90 == target {
return true;
}
let mat180 = mat90.rotate();
if mat180 == target {
return true;
}
let mat270 = mat180.rotate();
if mat270 == target {
return true;
}
false
}
}

#[test]
fn test() {
let mat = vec_vec_i32![[0, 1], [1, 0]];
let target = vec_vec_i32![[1, 0], [0, 1]];
let res = true;
assert_eq!(Solution::find_rotation(mat, target), res);
let mat = vec_vec_i32![[0, 1], [1, 1]];
let target = vec_vec_i32![[1, 0], [0, 1]];
let res = false;
assert_eq!(Solution::find_rotation(mat, target), res);
let mat = vec_vec_i32![[0, 0, 0], [0, 1, 0], [1, 1, 1]];
let target = vec_vec_i32![[1, 1, 1], [0, 1, 0], [0, 0, 0]];
let res = true;
assert_eq!(Solution::find_rotation(mat, target), res);
}
``````