[leetcode]旋转矩阵
题目
给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:
给定 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、通过观察可以发现, 旋转后的矩阵和原矩阵有一定的关联: 原来的第i行变成了旋转后的第n-i-1列,因此通过这样的方法,可以确定一个新的矩阵,两个for循环赋值即可,但是这个方法需要额外的矩阵空间
2、在旋转的过程中,每一圈都是可以找到对应的赋值规律的,先处理外圈,然后处理内圈,之前把所有的 圈处理。旋转主要是处理4个边的原始,依此赋值即可
func rotate(matrix [][]int) {
l1 := len(matrix)
for i := 0; i < l1/2; i++ {
for j := i; j < l1-i-1; j++ {
f := matrix[j][l1-i-1]
matrix[j][l1-i-1] = matrix[i][j]
//f2 := matrix[l1-j-1][l1 -i -j]
//matrix[l1-j-1][l1 -i -j] = f
matrix[i][j] = matrix[l1-j-1][i]
matrix[l1-j-1][i] = matrix[l1-i-1][l1-j-1]
matrix[l1-i-1][l1-j-1] = f
}
}
}
欢迎关注个人公众号