给你一个 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]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-100 <= matrix[i][j] <= 100
顺时针旋转就是: 第一行->从左到右,最后一列->从上到下,最后一行->从右到左,第一列->从下到上
function spiralOrder(matrix: number[][]): number[] {
//给你一个 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]
//提示:
//m == matrix.length
//n == matrix[i].length
//1 <= m, n <= 100
//-100 <= matrix[i][j] <= 100
let res: number[] = [];
if (matrix.length === 0) {
return res;
}
let row = 0; // 行
let col = 0; // 列
let rowEnd = matrix.length - 1;
let colEnd = matrix[0].length - 1;
let direction = 0;
while (row <= rowEnd && col <= colEnd) {
if (direction === 0) {
for (let i = col; i <= colEnd; i++) {
res.push(matrix[row][i]);
}
row++;
}
if (direction === 1) {
for (let i = row; i <= rowEnd; i++) {
res.push(matrix[i][colEnd]);
}
colEnd--;
}
if (direction === 2) {
for (let i = colEnd; i >= col; i--) {
res.push(matrix[rowEnd][i]);
}
rowEnd--;
}
if (direction === 3) {
for (let i = rowEnd; i >= row; i--) {
res.push(matrix[i][col]);
}
col++
}
direction = (direction + 1) % 4;
}
return res;
}