输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
巧妙的二维数组的方式 new Array().fill().map(() => new Array().fill())
输入:
[ [1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
code
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var printMatrix = function(matrix) {
const res = []
const n = matrix.length
if (!n) return res
const m = matrix[0].length
let dx = [-1, 0, 1, 0]
let dy = [0, 1, 0, -1]
const st = new Array(n).fill(0).map(() => new Array(m).fill(false)) //二维的状态数组
let x = 0, y = 0, d = 1 //d表示方向,从右开始
for(let i = 0; i < n * m; i ++) {
res.push(matrix[x][y])
st[x][y] = true
let a = x + dx[d], b = y + dy[d]
if (a < 0 || a >= n || b < 0 || b >= m || st[a][b]) {
d = (d + 1) % 4 //改变方向后再更新
a = x + dx[d]
b = y + dy[d]
}
x = a, y = b
}
return res
};