剑指 Offer 29. 顺时针打印矩阵

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路:

剥洋葱,一层一层从矩阵中剥掉

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var spiralOrder = function(matrix) {
var res = []
let flag = true
while(matrix.length) {
// 从左到右
if(flag){
// 第一层
res = res.concat(matrix.shift())
// '现在'的第一层到最后一层的末尾
for(let i=0; i<matrix.length; i++){
matrix[i].length && res.push(matrix[i].pop())
}
// 右到左
} else {
// 最后一层
res = res.concat(matrix.pop().reverse())
// '现在'的最后一层到第一层
for(let i=matrix.length - 1; i> 0; i--){
matrix[i].length && res.push(matrix[i].shift())
}
}
flag = !flag
}
return res
};