实现思路
具体代码
创建矩阵
function createMatrix(row, col) {
if (col === undefined) col = row;
const matrix = [];
for (let i = 0; i < row; i++) {
let rowItems = [];
for (let j = 0; j < col; j++) {
rowItems.push(i * col + j + 1);
}
matrix.push(rowItems);
}
return matrix;
}
function printMatrix(matrix) {
let row = matrix.length;
let col = matrix[0] && matrix[0].length;
if (!row || !col) return;
let max = 0;
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
let cell = matrix[i][j];
max = Math.max(max, String(cell).length);
}
}
let lines = [];
for (let i = 0; i < row; i++) {
lines.push(matrix[i].map(cell => {
return `${' '.repeat(max)}${cell}`.substr(-max);
}).join(', '));
}
console.log(lines.join('\n'));
}
顺时针打印
function printMatrixClockwise(matrix) {
let sx = 0;
let sy = 0;
let ex = matrix[0].length - 1;
let ey = matrix.length - 1;
let arr = [];
while (sx <= ex && sy <= ey) {
for (let i = sx; i < ex; i++) {
arr.push(matrix[sy][i]);
}
for (let i = sy; i < ey; i++) {
arr.push(matrix[i][ex]);
}
for (let i = ex; i > sx; i--) {
arr.push(matrix[ey][i]);
}
for (let i = ey; i > sy; i--) {
arr.push(matrix[i][sx]);
}
sx++;
sy++;
ex--;
ey--;
}
if (--sx === ++ex && --sy === ++ey) {
arr.push(matrix[sy][sx]);
}
console.log(arr.join(', '));
}
逆时针打印
function printMatrixAnticlockwise(matrix) {
let sx = 0;
let sy = 0;
let ex = matrix[0].length - 1;
let ey = matrix.length - 1;
let arr = [];
while (sx <= ex && sy <= ey) {
for (let i = sy; i < ey; i++) {
arr.push(matrix[i][sx]);
}
for (let i = sx; i < ex; i++) {
arr.push(matrix[ey][i]);
}
for (let i = ey; i > sy; i--) {
arr.push(matrix[i][ex]);
}
for (let i = ex; i > sx; i--) {
arr.push(matrix[sy][i]);
}
sx++;
sy++;
ex--;
ey--;
}
if (--sx === ++ex && --sy === ++ey) {
arr.push(matrix[sy][sx]);
}
console.log(arr.join(', '));
}
运行结果
let matrix = createMatrix(4, 5);
printMatrix(matrix);
printMatrixClockwise(matrix);
printMatrixAnticlockwise(matrix);