2016-03-07 6 views
0
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 
      } 
    } 
} 

Выше приведен код поворота матрицы (сначала трансформируйте, затем поверните). Но я не могу понять код для строк 1,2 и 3, я заменил эти три строки своим собственным следующим кодом, и он работает хорошо.Поворот матричной путаницы в Java

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

Может кто-нибудь объяснить, что делают первые три линии?

+0

, которые выравнивают точно? Потому что линии 1 в коде, публикуемую является 'общественного ИНТ [] [] Решение (ИНТ [] [] матрица, внутр флаг) {' – Guiroux

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^