在Java中旋转矩阵混淆

时间:2016-03-07 16:08:47

标签: java matrix matrix-inverse rotational-matrices

public int[][] Solution(int[][] matrix, int flag) {
    if (matrix == null || matrix.length == 0 || matrix[0].length == 0)  return matrix;
    //int m = matrix.length, n = matrix[0].length;
    int[][] rvalue;
    rvalue = transpose(matrix);
    flip(rvalue, flag);
    return rvalue;
}
// transporse the matrix
private int[][] transpose(int[][] matrix) {
    int m = matrix.length, n = matrix[0].length;
    int[][] rvalue = new int[n][m];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            rvalue[i][j] = matrix[j][i];
    return rvalue;
}
// clockwise rotate the matrix
private void flip(int[][] matrix, int flag) {
    int m = matrix.length, n = matrix[0].length;
    if (flag == 1) {    
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n / 2; j++) {
                matrix[i][j] ^= matrix[i][n-j-1]; // line 1
                matrix[i][n-j-1] ^= matrix[i][j]; // line 2
                matrix[i][j] ^= matrix[i][n-j-1]; // line 3
            }
    }
}

上面是旋转矩阵的代码(首先是discorse,然后是旋转)。但是我无法理解第1,2和3行的代码,我用我自己的代码替换了这三行,并且运行良好。

int temp=matrix[i][j];
matrix[i][j]=matrix[i][matrix[0].length-j-1];
matrix[i][matrix[0].length-j-1]=temp;

有人可以解释原来的三条线在做什么吗?

1 个答案:

答案 0 :(得分:0)

3行使用xor运算符来交换值。 我永远不会使用它,除非你真的很难记忆,因为你明显注意到,这很难理解。

Here's a link to some info on the algorithm it's using to exchange the values