python - 获取每个数字小于某个数字的数字组合
问题描述
给定长度k
和target
,limit
我想得到一个数字组合,其中每个数字包含[0 ~ limit]
并且可以有k
数字并且总和为target
。
因此,例如,如果我有k=2
target=4
and limit=4
,
我会有
[0, 4], [1, 3], [2, 2], [3, 1], [4, 0]
def get_combination(spots, target):
if spots == 1:
yield (target, )
else:
for i in range(target + 1):
for j in get_combination(spots - 1, target - i):
yield (i, ) + j
我试过上面的方法,但是这个没有限制。
解决方案
您快到了!您可以进行非常简单的修改来解决限制。
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)]
推荐阅读
- machine-learning - 将全连接层转换为卷积层?
- java - 每次我添加一个新项目时,RecyclerView 都会填充每个项目
- javascript - 我如何从一个元素中获得不同的孩子 - 量角器
- python-3.x - Python Selenium Chromedriver 停止加载主页
- makefile - What is the nmake equivalent of filter-out?
- jquery - 如何阅读 HTML 组件类的文本值
- python - 如何通过在 Python 中使用其 ISO 语言代码获取语言的所有 unicode 字符?
- javascript - 用另一个数组过滤数组对象
- python - 烧瓶中的 Http PUT 方法在断言中失败
- python - 使用第二个元素从元组列表创建字典