貌似是careercup原题
package Level4;
/**
* Rotate Image
*
* 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?
*
*/
public class S48 {
public static void main(String[] args) {
}
// 矩阵顺时针转90度:先沿中线水平翻转,再沿着对角线翻转
// eg:
/*
1 2 3 7 8 9 7 4 1
4 5 6 => 4 5 6 => 8 5 2
7 8 9 1 2 3 9 6 3
*/
public void rotate(int[][] matrix) {
int len = matrix.length;
// 先沿中线水平翻转
for(int i=0; i<len/2; i++){
for(int j=0; j<len; j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[len-1-i][j];
matrix[len-1-i][j] = tmp;
}
}
// 再沿着对角线翻转
for(int i=0; i<len; i++){
for(int j=i+1; j<len; j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
}
}
public class Solution {
public void rotate(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
for(int i=0; i<rows/2; i++){
for(int j=0; j<cols; j++){
swap(matrix, i, j, rows-1-i, j);
}
}
for(int i=0; i<rows; i++){
for(int j=i; j<cols; j++){
swap(matrix, i, j, j, i);
}
}
}
public void swap(int[][] matrix, int x1, int y1, int x2, int y2){
int tmp = matrix[x1][y1];
matrix[x1][y1] = matrix[x2][y2];
matrix[x2][y2] = tmp;
}
}