题目:给出一个m * n的矩阵(m行,n列),请按照顺时针螺旋顺序返回元素。例如,给出以下矩阵:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
应该返回[1,2,3,6,9,8,7,4,5].
我的解答:
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
var rawPointer = 0; //行指针
var colPointer = 0; //列指针
if (!matrix) {
matrix = [
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
];
}
var raw = matrix.length;
if (raw < 2 && !matrix[0]) {
return matrix;
}
var col = matrix[0].length;
var _raw = raw,
_col = col;
var tempArr = [];
var isReadingLine = true;
var rawFlag = -1;
var colFlag = -1;
for (var i = 0; i < raw * col;) {
if (isReadingLine) {
//读行
colFlag = -colFlag;
for(var m = 0; m < _col; m ++,colPointer += colFlag) {
tempArr.push(matrix[rawPointer][colPointer]);
}
//恢复行指针到行指针方向末尾
colPointer -= colFlag;
isReadingLine = false;
//总执行进度跳跃
i += _col;
//执行完一行之后,下次列循环长度减1
_raw --;
//列指针向前挺进加1
rawPointer += colFlag;
} else {
//读列
rawFlag = -rawFlag;
for(var n = 0; n < _raw; n ++, rawPointer += rawFlag) {
tempArr.push(matrix[rawPointer][colPointer]);
}
//恢复行指针到行指针方向末尾
rawPointer -= rawFlag;
isReadingLine = true;
//执行完一行之后,下次行循环长度减1
i += _raw;
_col --;
//行指针往后退一位
colPointer -= rawFlag;
}
}
return tempArr;
}