【免费题库】华为OD机试 - 螺旋数字矩阵(Java & JS & Python & C & C++)
题目描述:
给定一个正整数n,生成一个包含1到n^2的数字的矩阵,矩阵的排列规则如下:
从左上角开始,以顺时针螺旋方式进行填充。
示例:
输入:n = 3
输出:
[[1, 2, 3],[8, 9, 4],
[7, 6, 5]]
解决方案:
这个问题可以通过模拟螺旋矩阵生成的过程来解决。以下是使用Java、JavaScript、Python和C/C++实现的解决方案。
Java 实现:
class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int start = 0;
int count = 1;
int loop = n / 2;
while (loop-- > 0) {
int endX = n - 1 - start;
int endY = n - 1 - start;
// 上行
for (int i = start; i <= endX; i++) {
matrix[start][i] = count++;
}
// 右列
for (int i = start; i <= endY; i++) {
matrix[i][endX] = count++;
}
// 下行
for (int i = endX; i >= start && endY != start; i--) {
matrix[endY][i] = count++;
}
// 左列
for (int i = endY; i >= start && endX != start; i--) {
matrix[i][start] = count++;
}
start++;
}
if (n % 2 == 1) {
matrix[start][start] = count;
}
return matrix;
}
}
JavaScript 实现:
function generateMatrix(n) {
let matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));
let start = 0;
let count = 1;
let loop = n / 2 | 0;
while (loop--) {
let endX = n - 1 - start;
let endY = n - 1 - start;
// 上行
for (let i = start; i <= endX; i++) {
matrix[start][i] = count++;
}
// 右列
for (let i = start; i <= endY; i++) {
matrix[i][endX] = count++;
}
// 下行
for (let i = endX; i >= start && endY != start; i--) {
matrix[endY][i] = count++;
}
// 左列
for (let i = endY; i >= start && endX != start; i--) {
matrix[i][start] = count++;
}
start++;
}
if (n
评论已关闭