首页 > 编程语言 > 详细

【数组】Rotate Image

时间:2016-01-07 22:35:40      阅读:214      评论:0      收藏:0      [点我收藏+]

题目:

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。

技术分享

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

旋转前:技术分享 ,旋转后:技术分享

 

我们把环分成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;
        }
    }
};

方法二:

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

技术分享    转置变为   技术分享   每一行翻转变为 技术分享

【数组】Rotate Image

原文:http://www.cnblogs.com/shytong/p/5111424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!