抛出问题:
求给定数组任意组合等于一个定值的所有解 例如列表l = [1, 2, 3, 4, 5],求任意组合的结果为10的所有答案
问题分析:
实际就是列表的所有排列组合,然后算出每个排列组合的值,记录等于所求值的组合结果。
代码实现就是先生成和 l 等长的全0列表,0表示,列表该位置数不取,1表示列表该位置数取,就这样一直递归,一直到全1
# -*- coding:utf-8 -*- # 日期:2018/6/11 7:30 # Author:小鼠标 # 求给定数组任意组合等于一个定值的所有解 list = [1, 2, 3, 4, 5] val = 10 # 生成等长的全0列表 x = [0 for i in range(0,len(list))] # 递归方法 x 记录列表取跟不取,i表示当前递归的位置,has表示当前所有取的值的和 def get_val(x,i,has): if i > len(x) - 1: return if has + list[i] == val: #符合条件记录 x[i] = 1 print(x) x[i] = 0 # 当前位置取 执行一次 x[i] = 1 get_val(x,i+1,has+list[i]) # 当前位置不取 执行一次 x[i] = 0 get_val(x, i + 1, has) get_val(x,0,0) # ===========结果========= # [1, 1, 1, 1, 0] 》》》[1,2,3,4] 1+2+3+4=10 # [1, 0, 0, 1, 1] 》》》[1,4,5] 1+4+5=10 # [0, 1, 1, 0, 1] 》》》[2,3,5] 2+3+5=10
我相信努力的人运气不会差,未来会给我一双梦想的翅膀