JavaScript 方阵元素螺旋
在这个问题陈述中,我们的主要目的是使用Javascript功能将方阵元素螺旋排列起来。有几种方法可以在Javascript中完成这个任务。
理解问题陈述
问题陈述是在Javascript中编写一个函数,将输出作为方阵元素的螺旋排列。例如,如果我们有一个二维矩阵为[1,2][3,4]
,如果我们将元素在顺时针方向螺旋排列,那么输出数组将是[1,2,4,3]。
给定问题的逻辑
对于代码,我们将实现一个函数来完成给定的工作。在这个函数内部,我们将传递一个参数矩阵,我们需要将其转换为顺时针螺旋顺序的数组。我们将通过维护四个变量来完成这个过程。这些变量将表示矩阵的边界,分别是行的开始、行的结束、列的开始和列的结束。在这个函数内部,我们将遍历矩阵的元素,并将元素推入结果数组中。
步骤
步骤1 − 声明一个名为spiralElements的函数,使用矩阵作为参数。
步骤2 − 定义所需的变量。一个结果数组,其中我们将存储结果数组。然后定义行和列的起始和结束点,并将它们命名为rowStart、rowEnd、colStart和colEnd。
步骤3 − 使用while循环循环并运行此循环,直到起始点小于结束点。
步骤4 − 在此循环中,我们将按顺序遍历这些元素,向右、向左、向上和向下。
步骤5 − 返回给定矩阵的螺旋数组的结果。
算法的代码
//function to spiraling the matrix elements
function spiralElements(matrix) {
const result = [];
let rowStart = 0;
let rowEnd = matrix.length - 1;
let colStart = 0;
let colEnd = matrix[0].length - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
// Traverse right
for (let i = colStart; i <= colEnd; i++) {
result.push(matrix[rowStart][i]);
}
rowStart++;
// Traverse down
for (let i = rowStart; i <= rowEnd; i++) {
result.push(matrix[i][colEnd]);
}
colEnd--;
// Traverse left
if (rowStart <= rowEnd) {
for (let i = colEnd; i >= colStart; i--) {
result.push(matrix[rowEnd][i]);
}
rowEnd--;
}
// Traverse up
if (colStart <= colEnd) {
for (let i = rowEnd; i >= rowStart; i--) {
result.push(matrix[i][colStart]);
}
colStart++;
}
}
return result;
}
const matrix = [ [7, 8, 9], [4, 5, 6], [1, 2, 3] ];
console.log(spiralElements(matrix));
在上面的输出中,我们可以看到给定方阵的螺旋元素。螺旋是顺时针方向的。如果我们从7(第一个元素)开始形成螺旋,然后遍历8、9,接着是6(第二行第三列)、3(第三行第三列)、2、1、4、5。
复杂度
函数的时间复杂度为O(n^2),其中n为给定方阵的一边的长度。这是因为我们正好遍历了矩阵中的每个元素。代码使用的空间复杂度也是O(n^2),因为它将结果存储为元素螺旋顺序的新数组。
结论
所以上述函数可以用于以顺时针方向螺旋矩阵的元素,时间复杂度为O(n^2)。我们主要使用了四个变量来跟踪矩阵的元素,以顺时针顺序进行螺旋。