给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
matrix.length == n
matrix[i].length == n
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
例子:
例子1输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
解题思路:
方法一:
看个例子
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]
按照这个规律有
代码:
func rotate(_ matrix: inout [[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]
}
}
matrix = temp
}
方法二
还是下面的例子, 针对每一项A[i][j], 做一次下标互换即A[i][j] → A[j][i]
1, 2, 3
4, 5, 6
7, 8, 9
→
1, 4, 7
2, 5, 8
3, 6, 9
那么多对于我们的想要的结果, 只需要遍历每一行, 将每一行倒序就可以
7, 4, 1
8, 5, 2 (目标)
9, 6, 3
其实可以看出规律, 90度转换后, 原来的A[i][j] → A[j][matrix.count - 1 - i]
按照这个规律有
func rotate(_ matrix: inout [[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[i][j] = matrix[j][i]
}
}
for i in 0..<temp.count {
matrix[i] = temp[i].reversed()
}
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论