1886-判断矩阵经轮转后是否一致
给你两个大小为 n x n 的二进制矩阵 mat 和 target 。现 以 90 度顺时针轮转 矩阵 mat 中的元素
若干次 ,如果能够使 mat 与 target 一致,返回 true ;否则,返回 __false 。
示例 1:

**输入:** mat = [[0,1],[1,0]], target = [[1,0],[0,1]]
**输出:** true
**解释:** 顺时针轮转 90 度一次可以使 mat 和 target 一致。
示例 2:

**输入:** mat = [[0,1],[1,1]], target = [[1,0],[0,1]]
**输出:** false
**解释:** 无法通过轮转矩阵中的元素使 equal 与 target 一致。
示例 3:

**输入:** mat = [[0,0,0],[0,1,0],[1,1,1]], target = [[1,1,1],[0,1,0],[0,0,0]]
**输出:** true
**解释:** 顺时针轮转 90 度两次可以使 mat 和 target 一致。
提示:
n == mat.length == target.lengthn == mat[i].length == target[i].length1 <= n <= 10mat[i][j]和target[i][j]不是0就是1
方法一:模拟轮转操作
提示 1
将一个矩阵 90 度顺时针旋转 4 次,旋转后的矩阵与本身一致。
思路与算法
根据 提示 1,我们可以模拟 4 次将 mat 90 度顺时针旋转的操作,并在每次旋转操作后与 target 比较。
对于旋转操作,可以建立额外数组实现,也可以原地旋转。不同方法的具体细节与相关推导读者可以参考「48. 旋转图像」的题解 。
本文中,我们采用原地旋转的方式(即上文题解链接中的 方法二)实现旋转操作。
代码
1 | class Solution { |
1 | class Solution: |
复杂度分析
时间复杂度:O(n^2),其中 n 为 mat 的边长。我们最多进行 4 次旋转与比较操作,每次旋转操作的时间复杂度为 O(n^2),每次比较操作的时间复杂度为 O(n^2)。
空间复杂度:O(1)。
Comments