LeetCode 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?

题意:给出一个矩阵,问顺时针旋转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;
           }
        }
    }
}

你可能感兴趣的:(LeetCode Rotate Image(矩阵的旋转))