【数组】Spiral Matrix
题目:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
思路:
逐个环的打印, 对于m *n的矩阵,环的个数是 Math.ceil((Math.min(m,n))/2)。对于每个环顺时针打印四条边。
注意的是:最后一个环可能只包含一行或者一列数据
/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(matrix) { if(matrix.length==0||matrix==null){ return []; } var m=matrix.length,n=matrix[0].length; var circle=Math.ceil((Math.min(m,n))/2); var a=m,b=n,res=[]; for(var i=0;i<circle;i++,a-=2,b-=2){ for(var col=i;col<i+b;col++){ res.push(matrix[i][col]); } for(var row=i+1;row<i+a;row++){ res.push(matrix[row][i+b-1]); } if(a==1||b==1)break; for(var col=i+b-2;col>=i;col--){ res.push(matrix[i+a-1][col]); } for(var row=i+a-2;row>i;row--){ res.push(matrix[row][i]); } } return res; };