在若干个整数中找到相加之和为某个整数的所有组合的算法

 给定一个数t,以及n个整数,在这n个整数中找到相加之和为t的所有组合,
例如t = 4,n = 6,这6个数为[4, 3, 2, 2, 1, 1],这样输出就有4个不同的组合,
它们的相加之和为4:4, 3+1, 2+2,2+1+1。

我用c#实现的,定义了一个栈来存放符合条件的数据。代码如下.

 

 1   int a = 4;
 2   int[] iArr = new int[6] { 4, 3, 2, 2, 1, 1 };
 3   Stack<int> stack = new Stack<int>();
 4   private void Calc()
 5   {
 6       for (int i = 0; i < iArr.Length; i++)
 7       {
 8           if (iArr[i] == a)
 9           {
10               //输出这个数
11               continue;
12           }
13           else if (iArr[i] > a)
14           {
15               continue;
16           }
17           stack.Clear();
18           stack.Push(iArr[i]);
19           Func(i, a - iArr[i]);
20       }
21   }
22 
23   private void Func(int i, int iValue)
24   {
25       for (int j = i + 1; j < iArr.Length; j++)
26       {
27           if (iArr[j] > iValue)
28           {
29               continue;
30           }
31           else if (iValue == iArr[j])
32           {
33               stack.Push(iArr[j]);
34               //输出stack 这一步略..
35               stack.Pop();
36           }
37           else if (iValue > iArr[j])
38           {
39               stack.Push(iArr[j]);
40               Func(j, iValue - iArr[j]);
41               stack.Pop();
42           }
43       }
44 
45   }

 

不过也是有一个问题,输出结果为:

4
3,1
3,1
2,2
2,1,1
2,1,1

 就是存在重复,暂时没什么好的方法解决。

 

posted @ 2010-05-15 13:51  南极山  阅读(1941)  评论(2编辑  收藏  举报