【数组】Rotate Image

题目:

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

思路:

方法一:

可以见矩阵看成多个环组成,如下4*4的矩阵包括两个环,第一个环为1,2,3,4,8,12,16,15,14,13,9,5,1,第二个环为6,7,11,10。

image

旋转一个矩阵,相当于把每一个环都旋转。如何旋转一个环呢?以最外层的环举例:                      本文地址

旋转前:image ,旋转后:image

 

我们把环分成3组:{1,4,16,13},{2,8,15,9},{3,12,14,5},每一组中:旋转后相当于把原来的数字移动到同组中下一个数字的位置

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    var n=matrix.length;
    if(n==0){
        return;
    }
    
    var circle=Math.ceil(n/2),len=n;
    for(var i=0;i<circle;i++,len-=2){
        var m = len - 1;
        for(var j = 0; j < m; j++)
        {
            var tmp = matrix[i][i+j];
            matrix[i][i+j] = matrix[i+m-j][i];
            matrix[i+m-j][i] = matrix[i+m][i+m-j];
            matrix[i+m][i+m-j] = matrix[i+j][i+m];
            matrix[i+j][i+m] = tmp;
        }
    }
};

方法二:

先将矩阵转置,然后把转置后的矩阵每一行翻转

image    转置变为   image   每一行翻转变为 image

posted @ 2016-01-07 21:51  很好玩  阅读(163)  评论(0编辑  收藏  举报