擅长:python、mysql、java
<p>您可以使用递归函数来实现这一点:选择一个合适的数字;然后对剩余的大小和总数进行递归。你知道吗</p>
<pre><code>import math
def partition(total, size=3, lowest=1):
if size == 1:
return [[total]]
else:
result = []
# At each choice, pick no less than a "fair" proportion of the remaining total.
# This avoids duplicating combinations.
limit = math.ceil(total / size)
# Iterate `i` through the range [ limit, total-(size-1) ], inclusive
for i in range(limit, total-size+2):
for shorter in partition(total-i, size-1):
result.append(shorter + [i])
return result
print(partition( 7, 3))
print(partition(12, 3))
</code></pre>
<p>输出:</p>
<pre><code>[[2, 2, 3], [1, 3, 3], [1, 2, 4], [1, 1, 5]]
[[4, 4, 4], [3, 5, 4], [2, 6, 4], [1, 7, 4], [3, 4, 5], [2, 5, 5], [1, 6, 5], [3, 3, 6], [2, 4, 6], [1, 5, 6], [2, 3, 7], [1, 4, 7], [2, 2, 8], [1, 3, 8], [1, 2, 9], [1, 1, 10]]
</code></pre>