蛇形数字宫格的实现js
蛇形数字宫格的实现(JavaScript)
蛇形数字宫格是一个按特定顺序填充数字的矩阵,数字从左上角开始,按照蛇形路径(先从左到右,再从右到左,依次交替)填充。以下是实现方法:
初始化矩阵
创建一个空的二维数组作为矩阵,根据输入的尺寸(如 n x n)初始化所有值为 0 或 null。
function createMatrix(n) {
return Array(n).fill().map(() => Array(n).fill(0));
}
填充蛇形数字
通过循环和方向控制填充数字。使用一个变量 direction 控制当前行是向左还是向右填充。
function fillSnakeMatrix(n) {
const matrix = createMatrix(n);
let num = 1;
for (let row = 0; row < n; row++) {
if (row % 2 === 0) {
// 从左到右填充
for (let col = 0; col < n; col++) {
matrix[row][col] = num++;
}
} else {
// 从右到左填充
for (let col = n - 1; col >= 0; col--) {
matrix[row][col] = num++;
}
}
}
return matrix;
}
输出矩阵
将生成的蛇形矩阵打印到控制台,便于查看结果。
function printMatrix(matrix) {
for (let row of matrix) {
console.log(row.join(' '));
}
}
const n = 5; // 宫格尺寸
const snakeMatrix = fillSnakeMatrix(n);
printMatrix(snakeMatrix);
示例输出
对于 n = 5,输出如下:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
动态调整方向
如果需要更灵活的方向控制(如从右到左开始),可以通过调整初始方向实现。
function fillSnakeMatrixFlex(n, startLeft = true) {
const matrix = createMatrix(n);
let num = 1;
let direction = startLeft; // true: 左到右, false: 右到左
for (let row = 0; row < n; row++) {
if (direction) {
for (let col = 0; col < n; col++) {
matrix[row][col] = num++;
}
} else {
for (let col = n - 1; col >= 0; col--) {
matrix[row][col] = num++;
}
}
direction = !direction; // 切换方向
}
return matrix;
}
支持非正方形矩阵
若需要支持 m x n 的矩形矩阵,调整初始化逻辑和填充逻辑。

function fillSnakeMatrixRect(m, n) {
const matrix = Array(m).fill().map(() => Array(n).fill(0));
let num = 1;
for (let row = 0; row < m; row++) {
if (row % 2 === 0) {
for (let col = 0; col < n; col++) {
matrix[row][col] = num++;
}
} else {
for (let col = n - 1; col >= 0; col--) {
matrix[row][col] = num++;
}
}
}
return matrix;
}
以上代码提供了蛇形数字宫格的完整实现,并支持扩展功能如动态方向和非正方形矩阵。






