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的矩陣中算出按螺旋順序有幾個環(huán),注意最終間的環(huán)可以是一個數(shù)字摊唇,也可以是一行或者一列咐蝇。環(huán)數(shù)的計算公式是 min(m, n) / 2,知道了環(huán)數(shù)巷查,我們可以對每個環(huán)的邊按順序打印有序。
定義p抹腿,q為當前環(huán)的高度和寬度,當p或者q為1時旭寿,表示最后一個環(huán)只有一行或者一列警绩,可以跳出循環(huán)。此題的難點在于下標的轉換盅称,如何正確的轉換下標是解此題的關鍵肩祥,我們可以對照著上面的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;
};