给定加法金字塔,确定是否可以求解。加法金字塔由层组成,每层的个数比其下层的少。层表示为。是基础层,和是顶上层。P i的第个数表示为P i ,j。P 我,1是最左边的数P 我,和P 我是右边的数字。你可能想象驻留在顶部和在中间,故名“除了金字塔”。
- ,即,在金字塔的每个数字是非零正整数。
- ,即,不金字塔的基层上的每个数字是在它下面的两个数的总和。
- 如果具有个数,则具有个数,因此是的最右边的数。用更简单的术语来说,每一层都比其下一层少一个数字。
一个除了金字塔拼图 是加法金字塔去掉一些数字(替换为)。它的解决方案是一个金字塔除了,其中,也就是说,拼图中原来存在的数字保持不变。这种难题可能有多个解决方案。
给定您一个额外的金字塔难题,您的工作将确定它是否只有一个解决方案。
输入值
您可以采用以下任何形式获取输入,但要保持一致:
- 层数组。
- 层状数组,形状像金字塔,使用一致的非正整数值作为元素之间的分隔符(每次仅使用一次)以及左右填充。分隔符和填充必须相同。
- 具有一致的有效左右填充的图层阵列(您必须保持一致,并且在这种情况下不要混合左右填充)。
请注意,必须使用不是严格正整数的一致值来表示缺失的数字;此值不能用作填充。另外,您可以将已连接的图层(仍然可以将它们分开),并且排序可以从底部到顶部,也可以从顶部到底部。
输出量
两个一致的不同值之一,其中一个表示唯一溶液的存在,另一个表示不存在溶液或不止一种溶液的存在。
规则
- 总是为真,如果,即,输入如果知道所有三个数字,则保证不会在其他两个数字之上不包含一个数字,这些数字不是它们的总和。
- ,即金字塔将包含至少一个已知数。
- 不要做这些事情。
- 这是代码高尔夫球,所以最短的答案会成功!但是,不要因为您的语言“太冗长”而阻止您发布解决方案。
测试用例
这些测试用例使用从上到下各层的数组,0
表示。
[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False
工作的例子
测试用例在这里工作。
独特的解决方案1
步骤1:。
步骤2:。
步骤3:。
步骤4:。
步骤5-6与步骤4类似。
因此,这里有我们独特的解决方案。
独特的解决方案2
步骤1:这里没有明显的方法,所以让我们尝试使用最小的可能值。
步骤2-5:看来最小值导致了解决方案,因此这是唯一的解决方案,因此是唯一的。
提示:关于这个难题的附加金字塔难题有一个定理,如果您想得足够认真,就可以证明。
独特的解决方案3
这显然是独特的解决方案。
没办法1
没办法2
非唯一解决方案
两种解决方案:
由于至少有两个解决方案,所以没有唯一的解决方案。