我有一个大小为n的数组。只要以下属性成立,每个元素都可以保存任何整数:
1) All elements are non-negative
2) sum(array[0,i+1])<i for 0<=i<n
3) sum(array)=n-1
让我们把这样一个数组称为一个桶。
我需要提出一个生成下一个存储桶的过程。
我们可以假设第一个桶是{0,0,0...n-1}
示例:对于n=5
,一些可能的组合是
[0 0 0 0 4]
[0 0 0 1 3]
[0 0 0 2 2]
[0 0 0 3 1]
[0 0 1 2 1]
[0 0 2 1 1]
[0 1 1 1 1]
[0 1 0 0 3]
[0 1 1 0 2]
我无法想出能够达到所有可能组合的程序。任何提示/提示? (注意我想生成下一个桶。我不打算一次打印出所有可能的桶)
答案 0 :(得分:2)
您可以使用简单的回溯程序。我们的想法是跟踪当前的sum
和当前索引i
。这将允许您表达所需的约束。
n = 5
a = [0] * n
def backtrack(i, sum):
if i > 0 and sum > i-1:
return
if i == n:
if sum == n-1:
print(a)
return
for e in range(n-sum):
a[i] = e
backtrack(i + 1, sum+e)
backtrack(0, 0)