题目:
给你一个
m
行n
列的矩阵matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2:
输入: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]
我的代码:
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let s = []
let m = matrix.length, n = matrix[0].length , k
if(m==1) return matrix[0]
// console.log(m,n)
let flag = [[0,1],[1,0],[0,-1],[-1,0]]
let a1 = 0 , a2 = -1
while(true){
for(let i=0;i<4; i++ ){
if(i==0||i==2) k=n
else k = m
// console.log('k=',k)
if(k==0) return s
for(let j=0 ;j<k; j++ ){
a1 = a1+flag[i][0]
a2 = a2+flag[i][1]
s.push(matrix[a1][a2])
// console.log(s,a1,a2)
}
if(i==0||i==2) m--
else n--
//第一次这里写错了,写成了k == n ? m-- : n--
//但是会出现nm相等的情况,所以不能使用三目运算符
// console.log(m,n)
}
}
};