受启发 问题
将2D图像展开为1D字符串的另一种方法是使用 希尔伯特曲线。
该曲线有很多版本,具体取决于计算时使用的迭代次数。下面是从一阶到五阶的希尔伯特曲线示例。
计算该曲线的方法如下。首先,我们将一阶希尔伯特曲线定义为图中所示的那条曲线(n = 1的曲线),以使其适合1x1的正方形。然后,我们制作该曲线的四个副本,将它们间隔为4x4正方形,以便它们都向左侧呈现“凹面”。然后,我们翻转两条最左侧的1曲线,以使顶部的一个凹面朝向顶部,而底部的凹面朝向底部。最后,我们连接相邻的希尔伯特曲线的角。如果要获得(n + 1)阶曲线,我们只需要对四个n阶曲线重复该过程即可。我们可以在此处看到该过程的可视化(我还将添加一张详细描述该过程的图像)
您在此挑战中的任务是沿着该矩阵的最低阶希尔伯特曲线展开整数矩阵。
为简单起见,我们将从矩阵的左上角开始绘制曲线。
您可以将输入作为整数列表的列表来接收,其中每个子列表代表矩阵的一行。
您可以假定输入将是一个方矩阵(n * n)。
例如:
输入:
[[ 1, 2,]
[ 3, 4 ]]
输出:
[ 1, 2, 4, 3 ]
由于我们使用的是如图所示的一阶希尔伯特曲线
输入:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
输出:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
使用二阶希尔伯特曲线
与往常一样,不允许出现标准漏洞。
这是代码高尔夫球,因此最短的答案以字节为单位。