我正在尝试使用for loop
以动态方式添加所有组合的数组列表值。例如,在数组中添加两个元素的组合可以通过嵌套循环来完成。类似地,像3,4,5,6,7,8这样的组合加法需要动态生成循环。我该怎么办?
static int birthday(List<Integer> s, int d, int m) {
int l=s.size();
int count=0;
int a[]=new int[l];
for (int x=0; x<l; x++){
a[x]=s.get(x);
}
if(m==2){
for (int i=0; i<l; i++){
for (int j=i+1; i<l; i++){
if(a[i]+a[j]==d){
count++;
}
}
}
}
else if(m==1){
count++;
}
return count;
}
以上代码适用于1和2组合以及所有3,4,... 10。我想生成动态for loop
。请提供解决方案。
答案 0 :(得分:2)
您可以使用递归:
static int birthday(List<Integer> s, int d, int m) {
int l=s.size();
int a[]=new int[l];
for (int x=0; x<l; x++){
a[x]=s.get(x);
}
return birthday(a, d, m, 0, 0);
}
private static int birthday(int[] a, int d, int m, int start, int sum) {
if (m == 0) {
return sum == d ? 1 : 0;
}
int count=0;
for (int i = start; i <= a.length-m; ++i) {
count += birthday(a, d, m-1, i+1, sum+a[i]);
}
return count;
}
如果对数组进行排序并且可以假定列表中的所有元素都是正数,则可以进行某些优化。