貌似是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; } }