分类:特定顺序遍历二维数组
题目描述:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
循环地按右下左上四个方向移动给二维数组填充元素,注意边界和改变移动方向的条件即可
代码实现:
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function (n) {
let left = 0,
right = n - 1,
top = 0,
bottom = n - 1; //边界
const result = [];
for (let k = 0; k < n; k++) {
result.push([]);
}
let i = 1;
do {
//右移
for (let j = left; j <= right; j++) {
result[top][j] = i;
i++;
}
top++;
//下移
for (let j = top; j <= bottom; j++) {
result[j][right] = i;
i++;
}
right--;
//左移
for (let j = right; j >= left; j--) {
result[bottom][j] = i;
i++;
}
bottom--;
//上移
for (let j = bottom; j >= top; j--) {
result[j][left] = i;
i++;
}
left++;
} while (i <= n * n)
return result;
};
运行结果: