leetcode 54. 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].
思路:
将一个矩阵按照螺旋顺序打印出来,只能一条边一条边的打印,首先我们要从给定的mxn的矩阵中算出按螺旋顺序有几个环,注意最终间的环可以是一个数字,也可以是一行或者一列。环数的计算公式是 min(m, n) / 2,知道了环数,我们可以对每个环的边按顺序打印。
定义p,q为当前环的高度和宽度,当p或者q为1时,表示最后一个环只有一行或者一列,可以跳出循环。此题的难点在于下标的转换,如何正确的转换下标是解此题的关键,我们可以对照着上面的3x3的例子来完成下标的填写,代码如下:
var spiralOrder = function(matrix) {
var res=[];
if(matrix.length===0) return [];
var m=matrix.length;
var n=matrix[0].length;
var c=m>n?Math.ceil(n/2):Math.ceil(m/2);
var p=m,q=n;
for(var i=0;i<c;++i,p-=2,q-=2){
for(var col=i;col<i+q;++col){
res.push(matrix[i][col]);
}
for(var row=i+1;row<i+p;++row){
res.push(matrix[row][i+q-1]);
}
if(p===1 || q===1) break;
for(var col=i+q-2;col>=i;--col){
res.push(matrix[i+p-1][col]);
}
for(var row=i+p-2;row>i;--row){
res.push(matrix[row][i])
}
}
return res;
};
网友评论