JavaScript 中的递归问题 Snail Trail

javascriptweb developmentfront end technologyobject oriented programming更新于 2026/1/1 17:16:17

假设,我们有一个像这样的数组 −

const arr = [
   [1, 2, 3, 4],
   [12,13,14,5],
   [11,16,15,6],
   [10,9, 8, 7]
];

该数组必然是一个方阵。

我们需要编写一个 JavaScript 函数,该函数接收此数组并通过获取元素并螺旋式地向内移动直到它收敛到中心来构造一个新数组。一条蜗牛轨迹绕着矩阵的外部和内部盘旋。

因此,上述数组的输出应为 −

const output = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];

我们将使用递归来解决这个问题。

示例

以下是代码 −

const arr = [
   [1, 2, 3, 4],
   [12,13,14,5],
   [11,16,15,6],
   [10,9, 8, 7]
];
const spiralForm = arr => {
   return arr.length > 1 ?
   arr.splice(0,1)[0]
   .concat(spiralForm(arr[0].map((c, i) => {
      return arr.map(r => r[i]);
   })
   .reverse())) :
   arr[0]
}
console.log(spiralForm(arr));

输出

这将在控制台上产生以下输出 −

[
  1,  2,  3,  4,  5,  6,
  7,  8,  9, 10, 11, 12,
 13, 14, 15, 16
]

相关文章


有用资源