描述:
数组中元素之和为特定数的组合。
代码:
/**
* 数组中元素之和为特定数的组合
*
* [1,2,3,4,5] => 7
*
* [[2, 5], [3, 4], [1, 2, 4]]
*
*/
public class Test3 {
private static int[] flag;
public static void main(String[] args) {
int number = 5;
int[] inputs = new int[number];
IntStream.range(0,number).forEach(i-> inputs[i] = i + 1);
flag = new int[inputs.length];
int sum = 7;
List<List<Integer>> result = Lists.newArrayList();
calculateSum(inputs,sum,inputs.length - 1, result);
System.out.println(result);
}
private static void calculateSum(int[] inputs, int sum, int inputsLength,
List<List<Integer>> result) {
int index;
if (sum == 0) {
List<Integer> r = Lists.newArrayList();
for (index = 0; index < flag.length; index++) {
if (flag[index] > 0) {
r.add(inputs[index]);
}
}
result.add(r);
}
for (index = inputsLength; index >= 0; index--) {
if (flag[index] == 0 && (sum - inputs[index]) >= 0) {
flag[index] = 1;
calculateSum(inputs, sum - inputs[index], index-1, result);
flag[index] = 0;
}
}
}
}
运行结果: