<p>是的,这确实是一个可以用递归来解决的问题。您有更多的控制权在代码中进行正确的检查,并且只遵循列表中可能有正确答案的路径。执行12个嵌套for循环并获取12个列表的乘积将不是一个有效的解决方案</p>
<p>以下是我的解决方案:</p>
<pre><code>def find_range(end, lists):
def find_range_inner(index, se):
# Return false if there are more numbers that have to be found
# then there are lists to be searched for.
if len(lists) - index - 2 < end - len(se):
return False
# Found all the numbers.
if len(se) == end + 1:
return True
# Check the options and return if any of them is True.
# `any` will make sure it won't continue searching if
# it already has found a True.
return any(
find_range_inner(index + 1, se | {el})
for el in lists[index]
if el not in se
)
return find_range_inner(0, set())
if __name__ == '__main__':
li = [
[0, 2],
[0, 1],
[3]
]
end = 3
print(find_range(end, li))
li.append([1, 2])
print(find_range(end, li))
</code></pre>
<p>如果找到了解决方案,即使有更多列表,它也会提前返回。此外,它的效率也得到了提高,因为<code>any</code>如果在迭代中发现“any”为True,它将直接停止进一步的迭代</p>