Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
Two method to do so. One is to swap according to the diagonal and then swap according to the middle row.
public void rotate(int[][] matrix) { int m = matrix.length; if(m == 0) return; // corner case int n = matrix[0].length; // swap according to the diag for(int i = 0; i < m; i++) { for(int j = 0; j < n - i - 1; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[n-1-j][m-1-i]; matrix[n-1-j][m-1-i] = temp; } } // swap accoding to the middle int half = m / 2; for(int i = 0; i < half; i++) { for(int j = 0; j < n; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[m-i-1][j]; matrix[m-i-1][j] = temp; } } }
Another way is to define four subarea and then swap them. If n is even then the subarea would be a square and if n is odd the subarea would be a rectangle with length and width differ by one.
public void rotate(int[][] matrix) { int m = matrix.length; if(m == 0) return; // corner case int n = matrix[0].length; int x = m / 2; int y = (m+1) / 2; // subarea to be rotate for(int i = 0; i < x; i++) { for(int j = 0; j < y; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[m-1-j][i]; matrix[m-1-j][i] = matrix[n-1-i][m-1-j]; matrix[n-1-i][m-1-j] = matrix[j][n-1-i]; matrix[j][n-1-i] = temp; } } }
没有评论:
发表评论