简单题也不是那么简单。 right, down, left, up 用来记录每次循环到哪,每次都会进行一个改变;i, j 代表在原矩阵中的坐标;while 中的 if 用于判断终止。
function printMatrix(matrix)
{
// write code here
let right = matrix[0].length - 1;
let down = matrix.length - 1;
let left = 0;
let up = 1;
let arr = []
let [i, j] = [0, 0];
// 考虑只有一行的情况
if (down == 0) {
return matrix[0];
}
// 考虑只有一列的情况
if (right == 0) {
for (let i = 0; i < down + 1; i++) {
arr.push(matrix[i][0]);
}
return arr;
}
while (arr.length != (matrix[0].length) * (matrix.length)) {
// while循环里的if用于判断终止
if (j - 1 == right) {
break;
}
for (; j <= right; j++) {
arr.push(matrix[i][j]);
}
i += 1;
j -= 1;
right -= 1;
if (i - 1 == down) {
break;
}
for (; i <= down; i++) {
arr.push(matrix[i][j]);
}
j -= 1;
i -= 1;
down -= 1;
if (j + 1 == left) {
break;
}
for (; j>= left; j--) {
arr.push(matrix[i][j]);
}
i -= 1;
j += 1;
left += 1;
if (i + 1 == up) {
break;
}
for (; i >= up; i--) {
arr.push(matrix[i][j]);
}
j += 1;
i += 1;
up += 1;
}
return arr;
}
module.exports = {
printMatrix : printMatrix
};