求大神来解决算法问题。
java 实现一组数任意个数相加等于 一个固定值 比如 int [] i = [1,2,3,4,5]; 固定值 6 输出 数组中任意相加等于6,不限制个数和重复。要求固定值参数化。求给力大神解决下,谢谢。 算法 Java
[解决办法]
public static void main(String[] args) {
int[] a = { 1,3,4,5,8,7,8,10,34};
for (int n = 1; n <= a.length; n++) {
int[] b = new int[n];
submit(a, 0, 0, n, b);
}
}
public static void submit(int[] a, int c, int i, int n, int[] b) {
for (int j = c; j < a.length - (n - 1); j++) {
int sum = 0 ;
b[i] = a[j];
if (n == 1) {
//System.out.println();
for(int k=0;k<b.length;k++){
sum+= b[k];
}
if(sum==25){//在这里判断
System.out.println(Arrays.toString(b));
}
} else {
n--;
i++;
submit(a, j + 1, i, n, b);
n++;
i--;
}
}
}
import java.util.LinkedList;
import java.util.List;
public class Hello {
public static void foo(int[] elements,
int currentIndex,
int currentSum,
final int resultSum,
List<Integer> results) {
if (currentSum > resultSum) {
return;
}
if (currentSum == resultSum) {
System.out.println(results);
return;
}
for (int i = currentIndex; i < elements.length; ++i) {
results.add(elements[i]);
foo(elements, i, currentSum + elements[i], resultSum, results); // 深度遍历
results.remove(results.size() - 1);
}
}
public static void main(String[] args) {
int[] elements = {1, 2, 3, 4, 5};
int resultSum = 6;
List<Integer> results = new LinkedList<Integer>();
foo(elements, 0, 0, resultSum, results);
}
}
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 2]
[1, 1, 1, 3]
[1, 1, 2, 2]
[1, 1, 4]
[1, 2, 3]
[1, 5]
[2, 2, 2]
[2, 4]
[3, 3]