zoukankan      html  css  js  c++  java
  • 【数组】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

  • 相关阅读:
    mysql事务
    mysql函数
    mysql自连接
    MYSQL添加外键关联
    SQL多表查询
    SQL数据完整性
    SQL limit
    SQL分组查询
    升级GCC 6.2编译LLVM的问题
    Quartz时SLF4J错误
  • 原文地址:https://www.cnblogs.com/shytong/p/5111424.html
Copyright © 2011-2022 走看看