螺旋矩阵 I
题目链接:
https://leetcode-cn.com/problems/spiral-matrix/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
var spiralOrder = function(matrix) { const m = matrix.length, n = matrix[0].length; const visited = new Array(m).fill(false).map(() => new Array(n).fill(false)); const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]; let row = 0, col = 0; let directionIndex = 0; const res = [];
for (let i = 1; i <= m * n; i++) { res.push(matrix[row][col]); visited[row][col] = true; const newRow = row + directions[directionIndex][0], newCol = col + directions[directionIndex][1]; if (newRow >= m || newRow < 0 || newCol >= n || newCol < 0 || visited[newRow][newCol]) { directionIndex = (directionIndex + 1) % 4; } row = row + directions[directionIndex][0]; col = col + directions[directionIndex][1]; }
return res; };
|
螺旋矩阵 II
题目链接:
https://leetcode-cn.com/problems/spiral-matrix-ii/
解法分析:几乎同螺旋矩阵 I
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function generateMatrix(n: number): number[][] { const maxNum = n * n; let curNum = 1; const direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]; let col = 0, row = 0; let directionIndex = 0; const res = new Array(n).fill(0).map(() => new Array(n).fill(0));
while (curNum <= maxNum) { res[row][col] = curNum; curNum++;
const nextRow = row + direction[directionIndex][0]; const nextCol = col + direction[directionIndex][1];
if (!(nextRow >= 0 && nextRow < n && nextCol >= 0 && nextCol < n && res[nextRow][nextCol] === 0)) { directionIndex = (directionIndex + 1) % 4; }
row = row + direction[directionIndex][0]; col = col + direction[directionIndex][1]; }
return res; };
|