算法题:数字组合

给出一个候选数字的集合 C 和目标数字 T,写一个函数找到 C 中所有的组合,使找出的数字和为 T。C 中的数字可以无限制重复被选取。

 

注意事项:

1、所有的数字(包括目标数字)均为正整数。

2、元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤  a2  ≤ … ≤  ak)。

3、解集不能包含重复的组合。 

 

格式:

 

输入行每一行输入数组 C 和一个目标数字 T,最后输出所有满足条件的组合。

 

样例输入

 

C = [ 2,3,6,7 ]

T = 7

 

样例输出

 

[ [ 7 ],[ 2,2,3 ] ]

 

 

 

先将C从小到大排序,然后创建一个栈,然后向栈中由小到大填入数字,每填一次就将栈中的数字的和与目标T进行比较,如果和大于T,就抛出然后反向由大到小填入数字将和进行比较,直到有一个数X使得栈中的和等于T。 然后将X作为下一个T进行计算。 先记录一下想法。

posted @ 2017-12-20 17:32  喝水吗  阅读(851)  评论(0编辑  收藏  举报