递归实现:从给定的字典中抽出所有相加值SUM的全部组合

递归的话,只需要考虑第一个数字的两种情况:选择或者不选择

class Dic:
    def __init__(self,id,values):
        self.id = id
        self.values = values

def fun(dic,res,target,index):
    if target == 0:
        print res
        return
    if index == len(dic)-1:
        return
    #not choice this
    fun(dic,res,target,index+1)
    #choice this
    res += dic[index].id
    target -= dic[index].values
    fun(dic,res,target,index+1)

if __name__ == ‘__main__‘:
    dic1 = Dic("X001",1)
    dic2 = Dic("X002",3)
    dic3 = Dic("X003", 4)
    dic4 = Dic("X004", 5)
    dic5 = Dic("X005", 9)
    dic6 = Dic("X00", 11)
    dic7 = Dic("X00", 2)
    dic = [dic1,dic2,dic3,dic4,dic5,dic6,dic7]
    res = ""
    target = 9
    fun(dic,res,target,0)
时间: 2024-10-12 17:38:55

递归实现:从给定的字典中抽出所有相加值SUM的全部组合的相关文章

非递归实现:从给定的字典中抽出所有相加值SUM的全部组合

例如 dic = {0 : 1, 1 : 3, 2 : 5, 3 : 9, 4 : 4} SUM = 9 抽取组合为 3:9 2:5   4:4     (5+4=9) 0:1   1:3   2:5     (1+3+5=9) 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标    代表的数被选中,为0则没选中.      首先初始化,将数组前n个元素置1,表示第一个组合为前n个数.      然后从左到右扫描数组元素值的"10"组合,找到第一个"

十四、python字典中的方法汇总

'''1.访问.修改,删除字典中的值:''' dict={'a':'11','b':'22','c':'33','d':'44'}print dict['a'],dict['d'] #访问dict['b']='abc' #修改print dict#删除del dict['c'] #删除字典中的某个值print dictdict.clear() #清空字典print dictdel dict #删除字典--------------------------------------------- 11

把1到100的数字拆分成字典中的两个键值对 python

需求:把1到100的列表拆分成字典中两个键值对,k1和k2. #!/usr/bin/python num = {} all_list = [] for nu in range(1101): all_list.append(nu) for i in all_list: if i < 75: if 'k1' in num.keys(): num['k1'].append(i) else: num['k1'] = [i, ] else: if 'k2' in num.keys(): num['k2']

字典中的一些操作

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableDictionary *mudic=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Jay",@"name",@"22",@"age",@"F

Petapoco Update在使用匿名对象修改时提示“给定关键字不在字典中”

>问题症状 在使用Petapoco的Update方法时通过匿名对象传入单个需要修改的字段时提示“给定关键字不在字典中”,调试中发现运行到 if (primaryKeyName != null) { --> pkpi = pd.Columns[primaryKeyName].PropertyInfo; } 时主键字段并未在pd.Columns中,于是报错. >解决办法 解决方法在https://github.com/toptensoftware/PetaPoco/issues/119,也就

[LeetCode] Longest Word in Dictionary through Deleting 删除后得到的字典中的最长单词

Given a string and a string dictionary, find the longest string in the dictionary that can be formed by deleting some characters of the given string. If there are more than one possible results, return the longest word with the smallest lexicographic

[PY3]——字典中的键如何映射多个值?字典如何排序?

Defaultdict 默认字典 collections 模块中的 defaultdict(默认字典),可以用来构造“一个键映射多个值”这样的字典 如果你想保持元素的插入顺序就应该使用list, 如果想去掉重复元素就使用set import collections import defaultdict d=defaultdict(list) / e=defaultdict(set) d = { 'a' : [1, 2, 3], 'b' : [4, 5] } e = { 'a' : {1, 2,

读取文本信息,拆分文本信息,根据拆分的文本信息保存在字典中

using System.Collections;using System.Collections.Generic;using UnityEngine; public class ObjectsInfo : MonoBehaviour { private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int, ObjectInfo>();//多个物品信息保存在字典中 ObjectInfo是一个类,在下面有定义

双数组原理在分词字典中的应用

首先是将分词字典构造成检索树.通常情况下,分词字典是完全的文本文件,其中每一行代表一个词 例如表3-1所示的字典可以构造成如图3-8所示字典检索树的形式. 由此一来,当利用该字典进行分词时,可以将待匹配字符串作为状态转移的字符输入,在字典检索树中进行遍历,从而判断该字符串是否为字典中存在的词.其算法如下: 1 Begin 2   c = FirstCharacter(s): //s为待匹配字符串 3   while(c不为空) 4          Begin 5