这篇文章提供了一些很好的python代码来查找一个总和为某个数字S的集合中的所有排列.我想消除输出中的不连续性,这样输出行中的任何一个元素都不会超过任何一个相邻的一排.
以下是生成我想要订购/排序的输出的代码:
def f(n,s):
if n == 1:
yield (s,)
else:
for i in xrange(s + 1):
for j in f(n - 1,s - i):
yield (i,) + j
L = list(f(3,5))
for i in L:
print i
Run Code Online (Sandbox Code Playgroud)
输出:
(0, 0, 5)
(0, 1, 4)
(0, 2, 3)
(0, 3, 2)
(0, 4, 1)
(0, 5, 0)
(1, 0, 4) <-Bad, 0 transitioned to 4 from one row to the next
(1, 1, 3)
(1, 2, 2)
(1, …Run Code Online (Sandbox Code Playgroud)