[leetcode]旋转矩阵

[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
        }
    }
}

欢迎关注个人公众号

发表回复

您的电子邮箱地址不会被公开。

粤ICP备17041560号-2