我在一次编码采访中遇到了这个问题,无法找到一个好的解决方案。
您将获得6个多米诺骨牌。一个多米诺骨牌有两个一半,每个斑点都有许多斑点。您正在构建3级多米诺骨牌金字塔。底层有3个多米诺骨牌,中间层有2个多米诺骨牌,顶层有1个。
这样的安排使得每个级别都位于其下面级别的中心上方。这是一个视觉效果:
[ 3 | 4 ]
[ 2 | 3 ] [ 4 | 5 ]
[ 1 | 2 ][ 3 | 4 ][ 5 | 6 ]
必须设置金字塔,以使每个多米诺骨牌上的一半的点数与下面的一半相同。这不适用于同一级别的相邻多米诺骨牌。
是否有可能以上述安排由6个多米诺骨牌构建金字塔?多米诺骨牌可以自由排列和旋转。
编写一个函数,该函数采用12个整数组成的数组(例如arr [0],arr [1]是第一个多米诺,arr [2],arr [3]是第二个多米诺,等等),然后返回“如果可以或不可以使用给定的6个多米诺骨牌建立金字塔,则选择“是”或“否”。
谢谢。
答案 0 :(得分:1)
您可以做得比蛮横强。我没有时间完整答案。因此,这更像是一个提示。
计算每个数字的出现次数。至少两个数字应至少为3,依此类推。如果不满足这些条件,则没有解决方案。在接下来的步骤中,您需要考虑数字在磁贴上的位置。
答案 1 :(得分:0)
我们可以制定一个递归解决方案:
valid_row:
if row_index < N - 1:
copy of row must exist two rows below
if row_index > 2:
matching left and right must exist
on the row above, around a center
of size N - 3, together forming
a valid_row
if row_index == N - 1:
additional matching below must
exist for the last number on each side
一种解决方法是在沿路径跟踪选定的多米诺骨牌的同时回溯。考虑到匹配的限制,六个多米诺骨牌金字塔应该很快就可以投入使用。