【发布时间】:2019-11-29 04:31:27
【问题描述】:
给定一个螺旋模式,我的工作是编写一个函数,它采用某些坐标并返回这些坐标处的数字。 例如:
4 < 3 < 2
v ^
5 0 > 1
v
6 > 7 > 8
如果输入是(1, -1),函数将返回8。
我不是在寻找代码。我正在寻找关于螺旋模式如何工作的解释,因为我对编程相对较新(参加介绍性在线课程)并且我从未遇到过这样的事情。我也想了解所涉及的算法。
同样,我不想要任何代码,因为我希望自己解决这个问题。我只是要求一个解释。
更新:我想出了这段代码,它有效地确定了外部正方形的最小数量并迭代直到达到所需的坐标。
def spiral_index(x, y):
small = max(x, y)*2 - 1
min_number = small**2
xpos = max(x, y)
ypos = -max(x, y) + 1
count = min_number
while xpos != x:
xpos -= 1
count += 1
while ypos != y:
ypos += 1
count += 1
return count
但是,我的在线课程提交页面拒绝了代码,因为执行时间太长。所以我需要一种对初学者友好的更快的方法。
【问题讨论】:
-
它总是应该从 3 点钟位置开始逆时针走吗?
-
这个问题的答案有一些有趣的想法(忽略Haskell并专注于解释):stackoverflow.com/questions/57569623/…这些答案是关于在给定序列号的情况下找到坐标,而你的问题是相反的- 找到给定坐标的序列号,所以它不是重复的,但你可能会发现它很有用。
-
@Selcuk 是的,这就是问题的表述方式。
-
根据您的输入,您向右移动 1 并向下移动 1 以达到 8。因此,您不会从
0索引开始吗? 3点钟开始是什么意思?从 1 点开始? -
@Ibragile 3 点逆时针指的是螺旋图案本身。它从 0 开始,1 在它的右边,数字按逆时针方向列出。