了解如何将矩阵旋转90度

时间:2014-09-18 20:57:30

标签: java

我试着理解这里的基本逻辑,例如,'n'代表什么? 如果你能简单解释一下这是如何工作的,那就太好了。 这是代码:

public static void rotate(int[][] matrix, int n) {
    for (int layer = 0; layer < n / 2; ++layer) {
        int first = layer;
        int last = n - 1 - layer;
        for(int i = first; i < last; ++i) {
            int offset = i - first;
            int top = matrix[first][i]; // save top

            // left -> top
            matrix[first][i] = matrix[last-offset][first];          

            // bottom -> left
            matrix[last-offset][first] = matrix[last][last - offset]; 

            // right -> bottom
            matrix[last][last - offset] = matrix[i][last]; 

            // top -> right
            matrix[i][last] = top; // right <- saved top
        }
    }
}

1 个答案:

答案 0 :(得分:0)

算法移动元素,首先是外部元素,然后是内部元素。

取这个矩阵(n = 4):

A  B  C  D
E  F  G  H
I  J  K  L
M  N  O  P

首先,旋转外部元素:

A -> D -> P -> M -> A
B -> H -> O -> I -> B
C -> L -> N -> E -> B

然后,你进入内循环,那里有一个位置:

F -> G -> K -> J -> F

实际旋转使用临时变量来保存第一个元素。让我们说一下:A -> D -> P -> M -> A

A值将保存到变量top。然后M覆盖A,然后P覆盖M,然后D覆盖P,最后top值用于覆盖D