找出1-9中有那些组合相加等于一个特定值,例如说20
num = [1,2,3,4,5,6,7,8,9]
def count(num,n):
# num = list(sorted(filter(lambda x: x <= n, num)))
# print(num)
combinations_impl(num, n, [])
def combinations_impl(num, n, ls):
if n == 0:
print(ls) #遍历列表中的元素如果通过目标值n减掉列表中所有元素等于0、那就满足要求、打印结果
return
for i in range(0, len(num)): #i取的是0到num列表长度-1
if num[i] <=n: #当列表当中遍历出来的元素小于传进来的目标值n
ls.append(num[i]) #就把列表当中遍历出来的元素追加到ls列表里面
combinations_impl(num[i + 1:], n - num[i], ls) #[5,6,7,8,9],15-5=10,[1,2,3,4,5]
ls.pop() #先添加到列表里面判断n是否等于0、如果不等于0、说明列表相加不等于目标值、则移除、继续下一次判断
else:
break #不满足要求的话直接退出
result = count(num, 20)