字节跳动青训营|豆包MarsCode AI刷题|蛇形填充n阶方阵

92 阅读1分钟

蛇形填充n阶方阵

问题描述

小U面临一个有趣的任务:在一个 n×n 的方阵中填入 1 到 n×n 这些数字,并要求按照蛇形顺序从右上角开始,沿着方阵的边界顺时针进行填充。蛇形填充的特殊排列方式使得每一层数字呈现出波浪形的排列方式。

例如,当 n=4 时,方阵应如下所示:

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

你需要编写程序输出填充后的方阵,确保格式的整齐性。


测试样例

样例1:

输入:n = 4
输出:[[10, 11, 12, 1], [9, 16, 13, 2], [8, 15, 14, 3], [7, 6, 5, 4]]

样例2:

输入:n = 5
输出:[[13, 14, 15, 16, 1], [12, 23, 24, 17, 2], [11, 22, 25, 18, 3], [10, 21, 20, 19, 4], [9, 8, 7, 6, 5]]

样例3:

输入:n = 3
输出:[[7, 8, 1], [6, 9, 2], [5, 4, 3]]

思路

  1. 方向数组

    • 定义方向数组 dx 和 dy,分别表示在x轴和y轴上的方向变化。
  2. 方向

    • direction 变量用于跟踪当前的方向(0代表向右,1代表向下,2代表向左,3代表向上)。
    • 方向的变化通过 (direction + 1) % 4 来实现,确保方向在0到3之间循环。
  3. 填充矩阵

    • 在每次迭代中,将当前位置 (x, y) 填充为 num,并将 num 增加1。
    • 计算下一个位置 (nx, ny)。如果下一步超出了边界则改变方向。

JAVA代码