1 题目
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
2 思路
使用辅助空间比较简单。
不使用辅助空间,想了半天,没想出来。。
看别人的代码,原来是要翻转两次。。
3 代码
public void rotate(int[][] matrix) { // 使用多余空间的 int length = matrix.length; Integer[][] m = new Integer[length][length]; for(int i=0;i<length;i++){ for(int j = 0;j<length;j++){ m[j][length-i-1] = matrix[i][j]; } } for(int i=0;i<length;i++){ for(int j = 0;j<length;j++){ matrix[i][j] = m[i][j]; } } } // 不使用多余空间 // 法1: exchange up and down matrix[i][j] = matrix[length-1-i][j],swap symmetry matrix[i][j] = matrix[j][i] public void rotate1(int[][] matrix) { int length = matrix.length; for(int i=0;i<length/2;i++){ for(int j = 0;j<length;j++){ int temp = matrix[i][j]; matrix[i][j] = matrix[length-1-i][j]; matrix[length-1-i][j] = temp; } } for(int i=0;i<length;i++){ for(int j = 0;j<i;j++){ int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } // 法2: transpose(matrix[i][j]=matrix[j][i], flip horizontally matrix[i][j] = matrix[i][length-1-j]