【数组】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。
旋转一个矩阵,相当于把每一个环都旋转。如何旋转一个环呢?以最外层的环举例: 本文地址
我们把环分成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; } } };
方法二:
先将矩阵转置,然后把转置后的矩阵每一行翻转