给你两个大小为 n x n 的二进制矩阵 mat 和 target 。现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 target 一致,返回 true ;否则,返回 false 。
n == mat.length == target.length
n == mat[i].length == target[i].length
1 <= n <= 10
mat[i][j] 和 target[i][j] 不是 0 就是 1
建议先做一下: IOS 算法(中级篇) ----- 旋转图像
例子
例子1输入:mat = [[0,1],[1,0]], target = [[1,0],[0,1]]
输出:true
解释:顺时针轮转 90 度一次可以使 mat 和 target 一致。
输入:mat = [[0,1],[1,1]], target = [[1,0],[0,1]]
输出:false
解释:无法通过轮转矩阵中的元素使 equal 与 target 一致。
输入:mat = [[0,0,0],[0,1,0],[1,1,1]], target = [[1,1,1],[0,1,0],[0,0,0]]
输出:true
解释:顺时针轮转 90 度两次可以使 mat 和 target 一致。
解题思路
解题思路
建议先做一下 48. 旋转图像
看个例子
1, 2, 3 (A[0][0], A[0][1], A[0][2])
4, 5, 6 (A[1][0], A[1][1], A[1][2])
7, 8, 9 (A[2][0], A[2][1], A[2][2])
→
7, 4, 1 (A[2][0], A[1][0], A[0][0])
8, 5, 2 (A[2][1], A[1][1], A[0][1])
9, 6, 3 (A[2][2], A[1][2], A[0][2])
其实可以看出规律, 90度转换后, 原来的A[i][j] → A[j][matrix.count - 1 - i]
按照这个规律, 我们依次旋转90, 180, 270判断, 目标target是否与旋转数组相等即可
代码:
func findRotation(_ mat: [[Int]], _ target: [[Int]]) -> Bool {
if mat == target { return true }
var time = 1, temp = mat
while time < 4 {
temp = cal(temp)
if target == temp { return true }
time += 1
}
return false
}
func cal(_ matrix: [[Int]]) -> [[Int]] {
var temp = Array(repeating: Array(repeating: 0, count: matrix.count), count: matrix.count)
for i in 0..<matrix.count {
for j in 0..<matrix[i].count {
temp[j][matrix.count - 1 - i] = matrix[i][j]
}
}
return temp
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论