在若干个整数中找到相加之和为某个整数的所有组合的算法
给定一个数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
就是存在重复,暂时没什么好的方法解决。