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?
题意:给出一个矩阵,问顺时针旋转90的矩阵
思路:假设矩阵的维数为n,则(x,y)矩阵后的位置为(y,n - 1 -x),其整个变换过程为(x,y)->(y, n - 1 - x)->(n - 1 -x, n - 1 - y)->(n - 1 - y, x)->(x, y)
具体代码如下
public class Solution { public void rotate(int[][] matrix) { int n = matrix.length; int m = n / 2; for (int i = 0; i < m; i++) { for (int j = i; j < n - 1 - i; j++) { int startx = i, starty = j; int x = startx, y = starty; int newx = y, newy = n - 1 - x; int tmp1 = matrix[x][y], tmp2; while (newx != startx || newy != starty) { tmp2 = matrix[newx][newy]; matrix[newx][newy] = tmp1; x = newx; y = newy; newx = y; newy = n - 1 - x; tmp1 = tmp2; } matrix[startx][starty] = tmp1; } } } }