一、顺时针打印NxN矩阵
题目描述:
输入一个正整数N,输出一个NxN矩阵。示例如下:
代码如下:
function PrintMatrix(n){
let result = [];
let number = 1;
let start = 0;
// 生成一个NxN空矩阵
for(let i = 0; i < n; i++){
result.push([]);
for(let j = 0; j < n; j++){
result[i].push();
}
}
while(n > start*2){
let end = n - 1 - start;
// 从左往右打印
for(let i = start; i <= end; i++){
result[start][i] = number;
number++;
}
// 从上往下打印
if(start < end){
for(let i = start + 1; i <= end; i++){
result[i][end] = number;
number++;
}
}
// 从右往左打印
if(start < end){
for(let i = end - 1; i >= start; i--){
result[end][i] = number;
number++;
}
}
// 从下往上打印
if(start < end-1){
for(let i = end - 1 ; i >= start + 1; i--){
result[i][start] = number;
number++;
}
}
start++;
}
return result;
}
// 测试
console.log(PrintMatrix(7));
二、顺时针打印MxN矩阵
题目描述:
输入两个正整数M,N,输出一个MxN矩阵。示例如下:
代码如下:
function PrintMatrix(rows,columns){
let result = [];
let number = 1;
let start = 0;
// 生成一个MxN空矩阵
for(let i = 0; i < rows; i++){
result.push([]);
for(let j = 0; j < columns; j++){
result[i].push();
}
}
while(rows > start*2 && columns > start*2){
let endX = columns - 1 - start;
let endY = rows - 1 - start;
// 从左往右打印
for(let i = start; i <= endX; i++){
result[start][i] = number;
number++;
}
// 从上往下打印
if(start < endY){
for(let i = start + 1; i <= endY; i++){
result[i][endX] = number;
number++;
}
}
// 从右往左打印
if(start < endX && start < endY){
for(let i = endX - 1; i >= start; i--){
result[endY][i] = number;
number++;
}
}
// 从下往上打印
if(start < endX && start < endY-1){
for(let i = endY - 1 ; i >= start + 1; i--){
result[i][start] = number;
number++;
}
}
start++;
}
return result;
}
// 测试
console.log(PrintMatrix(3,4));
三、顺时针打印矩阵
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
代码如下:
function PrintMatrix(matrix){
let result = [];
let rows = matrix.length;
let columns = matrix[0].length;
let start = 0;
while(rows > start*2 && columns > start*2){
let endX = columns - 1 - start;
let endY = rows - 1 - start;
// 从左往右打印
for(let i = start; i <= endX; i++){
result.push(matrix[start][i]);
}
// 从上往下打印
if(start < endY){
for(let i = start + 1; i <= endY; i++){
result.push(matrix[i][endX]);
}
}
// 从右往左打印
if(start < endX && start < endY){
for(let i = endX - 1; i >= start; i--){
result.push(matrix[endY][i]);
}
}
// 从下往上打印
if(start < endX && start < endY-1){
for(let i = endY - 1 ; i >= start + 1; i--){
result.push(matrix[i][start]);
}
}
start++;
}
return result;
}
// 测试
let Matrix = [[1,2],[3,4]];
console.log(PrintMatrix(Matrix)); // [1,2,4,3]
四、逆时针打印矩阵
题目描述:
输入一个矩阵,按照从外向里以逆时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7。
代码如下:
function PrintMatrix(matrix){
let result = [];
let rows = matrix.length;
let columns = matrix[0].length;
let start = 0;
while(rows > start*2 && columns > start*2){
let endX = columns - 1 - start;
let endY = rows - 1 - start;
// 从上往下打印
for(let i = start; i <= endY; i++){
result.push(matrix[i][start]);
}
// 从左往右打印
if(start < endX){
for(let i = start + 1; i <= endX; i++){
result.push(matrix[endY][i]);
}
}
// 从下往上打印
if(start < endY && start < endX){
for(let i = endY-1; i >= start; i--){
result.push(matrix[i][endX]);
}
}
// 从右往左打印
if(start < endX-1 && start < endY){
for(let i = endX - 1; i >= start+1; i--){
result.push(matrix[start][i]);
}
}
start++;
}
return result;
}
// 测试
let Matrix1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];
console.log(PrintMatrix(Matrix1)); // [ 1, 5, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2, 6, 10, 11, 7 ]
let Matrix2 = [[1,2,3,4]];
console.log(PrintMatrix(Matrix2)); // [ 1, 2, 3, 4 ]
let Matrix3 = [[1],[2],[3],[4]];
console.log(PrintMatrix(Matrix3)); // [ 1, 2, 3, 4 ]
let Matrix4 = [[1,2,3],[4,5,6]];
console.log(PrintMatrix(Matrix4)); // [ 1, 4, 5, 6, 3, 2 ]
let Matrix5 = [[1,2],[3,4],[5,6]];
console.log(PrintMatrix(Matrix5)); // [ 1, 3, 5, 6, 4, 2 ]
END