給定一組整數(如 {12, 60, -8, 99, 15, 35, 17, 18}),找出所有任意數量元素相加等於目標值(如 35)的組合。
package test1;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
String str = "12,60,-8,99,15,35,17,18,8,10,11,12";
int sum = 35;
diguiSum(str, sum);
}
public static void diguiSum(String str, int sum) {
String[] x = str.split(",");
int[] array = arrayTransform(x);
for (int i = 0; i < array.length; i++) {
int[] cache = new int[i + 1];
cir(0, i, 0, array, cache, sum);
}
}
private static void cir(int depth, int targetDepth, int start, int[] array, int[] cache, int sum) {
for (int i = start; i < array.length; i++) {
cache[depth] = array[i];
if (depth == targetDepth) {
if (getSum(cache) == sum) printCache(cache);
} else {
cir(depth + 1, targetDepth, i + 1, array, cache, sum);
}
}
}
private static int getSum(int[] cache) {
int s = 0; for (int v : cache) s += v; return s;
}
private static void printCache(int[] cache) {
for (int v : cache) System.out.print(v + ",");
System.out.println();
}
private static int[] arrayTransform(String[] strArray) {
int[] array = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) array[i] = Integer.parseInt(strArray[i]);
Arrays.sort(array);
int len = 0;
for (int i = 0; i < array.length; i++) if (array[i] > 35) { len = i; break; }
return Arrays.copyOf(array, len);
}
}
