给定n个同质(拓扑)圆,可组成嵌套图案的情况计算,python代码
情况描述图:
python代码
#coding=utf-8
#!/usr/bin/env python
def order_sum_given(n):
'''
给定和的非重复排列
n尽量不要超过26,否则运算会很慢!
len(order_sum_given(26)) = 2436
len(order_sum_given(27)) = 3010
'''
if n < 0:
return []
if n == 1:
return [[1]]
if n == 2:
return [[1,1],[2]]
if n > 26:
raise ValueError("n尽量不要超过26,否则运算会很慢!")
if n > 2:
li_result = []
for i in range(1, n, 1):
li1 = order_sum_given(n-i)
for j in li1:
j_temp = j[-1]
if j_temp > i:
continue
else:
a = j
a.append(i)
li_result.append(a)
li_result.append([n])
return li_result
li_result = order_sum_given(21)
print(len(li_result))
for i in li_result:
print