从零学算法59

59 .螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3

输出:\[1,2,3,8,9,4,7,6,5]

示例 2:

输入:n = 1

输出:\[1]

提示:

1 <= n <= 20

  • 按顺序定义顺时针的四个方向 \[0, 1, 1, 0, 0, -1, -1, 0],初始从 (0,-1) 开始,如果走一步后发现出界或遇到已填充的格子就回退一步并更新方向,否则就填值
js 复制代码
  var generateMatrix = function (n) {
      const pos = [[0, 1], [1, 0], [0, -1], [-1, 0]]
      let posIdx = 0
      let i = 0, j = -1
      let genCount = 0
      const ans = new Array(n).fill(0).map(() => new Array(n).fill(0))
      for (let val = 1; val < n * n; val++) {
          // 走一步
          i += pos[posIdx][0]
          j += pos[posIdx][1]
          // 如果出界或遇到已填充的格子就回退一步并更新方向
          if (i < 0 || i >= n || j < 0 || j >= n || ans[i][j] != 0) {
              i -= pos[posIdx][0]
              j -= pos[posIdx][1]
              posIdx = (posIdx + 1) % 4
              continue
          }
          ans[i][j] = val
      }
      return ans
  };
相关推荐
lisw051 小时前
分岔论揭示演化突变密码
开发语言·算法·数学建模
aqiu1111111 小时前
C++ TopK:使用 nth_element 快速求最小 K 个数(蓝桥杯 / LeetCode 可用)
算法
Suprman1 小时前
平面排版问题的数学建模与算法设计
算法·数学建模·排序算法·排版套料
FPGA信号处理1 小时前
【应用随机过程】:更新过程与马尔可夫链入门
算法·概率论
重生之小比特2 小时前
【算法拾光】二分查找|在排序数组中查找元素的第一个和最后一个位置 + 搜索旋转排序数组
数据结构·算法·排序算法
吴可可1232 小时前
DXF与AAMA格式转换模块推荐
算法
重生之小比特2 小时前
【算法拾光】二分查找|搜索旋转排序数组 + 寻找旋转排序数组中的最小值
算法
YukiRinLL2 小时前
查找与排序算法:复杂度、稳定性
数据结构·算法·排序算法
徐小夕11 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
Robert--cao11 小时前
移动底盘与机械臂联合规划:开源算法与工程实现
算法