https://leetcode-cn.com/problems/spiral-matrix/
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function (matrix) {
let backArr = []
let max = matrix.length * matrix[0].length
let i = 0,
j = 0
let statusArr = ["right", 'down', 'left', 'up']
let status = 0
let firstChange = false
while (backArr.length < max) {
let val = matrix[i]?.[j]
if (val == null) {
firstChange = true
status++
}
switch (statusArr[status % 4]) {
case 'right':
if (firstChange) {
i++
j++
firstChange = false
break
}
backArr.push(val)
matrix[i][j] = null
j++
break
case 'down':
if (firstChange) {
i++
j--
firstChange = false
break
}
backArr.push(val)
matrix[i][j] = null
i++
break;
case 'left':
if (firstChange) {
i--
j--
firstChange = false
break
}
backArr.push(val)
matrix[i][j] = null
j--
break;
case 'up':
if (firstChange) {
i--
j++
firstChange = false
break
}
backArr.push(val)
matrix[i][j] = null
i--
break;
}
}
return backArr;
};