给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
提示:
matrix.length == n
matrix[i].length == n
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
摘一个示例做个说明.
示例 1:
输入: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:
- 根据分析1,说明是可变数组
- 顺时针旋转90度,说明底部的转到左边,左边的转到上边,上边的转到右边.依次转动.
先根据图示,我们可以先采用上下交换,然后再左上,右下对角线交换即可
代码实现-Swift版本:
思路1代码:
func rotate(_ matrix: inout [[Int]]) {
// 先上下换,再对角线交换
for i in 0 ..< matrix.count/2 {
let tmp = matrix[i]
matrix[i] = matrix[matrix.count - 1 - i]
matrix[matrix.count - 1 - i] = tmp
}
for i in 0 ..< matrix.count {
for j in i + 1 ..< matrix[i].count {
let tmp = matrix[i][j]
matrix[i][j] = matrix[j][i]
matrix[j][i] = tmp
}
}
}
旋转图像提交结果.jpg
测试用例:
var array = [[1,2,3],[4,5,6],[7,8,9]]
到此力扣初级算法数组相关算法已经展示完了,下面会继续写一下数组相关的算法.然后再开启新的篇章.按类梳理,以点带面,以面带全,争取早日修成神功.
考察要点:
- 数组
- 数学
- 矩阵
网友评论