给定长度@GeneratedValue(strategy = GenerationType.AUTO)
和k
和target
,我想得到一个数字组合,其中每个数字包含limit
,可以有[0 ~ limit]
个数字,并且总计为k
。
例如,如果我有target
k=2
和target=4
,
我会
limit=4
我已经尝试了上面的方法,但是这个方法没有限制。
答案 0 :(得分:3)
您快到了!您可以进行非常简单的修改以解决此限制。
def get_combination(spots, target, limit):
if spots == 1 and target <= limit:
yield (target, )
elif spots > 1:
for i in range(limit + 1):
for j in get_combination(spots - 1, target - i, limit):
yield (i, ) + j
当我们得出spots == 1
的基本情况时,我们要确保余数小于限制。如果不是,则不要产生任何东西。然后,当我们选择要加入组合的数字时,请勿选择超出限制的任何内容!
>>> list(get_combination(2,4,3))
[(1, 3), (2, 2), (3, 1)]
答案 1 :(得分:0)
您可以像这样将limit
应用于现有功能:
def get_combination(spots, target, limit):
if spots != 1:
for i in range(limit + 1):
for j in get_combination(spots - 1, target - i, limit):
yield (i, ) + j
elif 0 <= target <= limit:
yield (target,)
这样:
print(list(get_combination(3, 8, 4)))
将输出:
[(0, 4, 4), (1, 3, 4), (1, 4, 3), (2, 2, 4), (2, 3, 3), (2, 4, 2), (3, 1, 4), (3, 2, 3), (3, 3, 2), (3, 4, 1), (4, 0, 4), (4, 1, 3), (4, 2, 2), (4, 3, 1), (4, 4, 0)]