请问在java中,怎么计算一个数组里最多可能的n个数相加的集合,n=1,2,....一直到数组的长度 10
比如说,一个数组[2,2,3]的结果应该是[2,3,4,5,7]在数组中一个数相加时候,也就是数组本身是[2,2,3],数组中两两相加的可能结果有[4,5],三个数都相加...
比如说,一个数组[2, 2 , 3]的结果应该是[2,3,4,5,7]
在数组中一个数相加时候,也就是数组本身是[2,2,3],数组中两两相加的可能结果有[4,5],三个数都相加的结果是[7],整合起来,不算重复的结果就是[2,3,4,5,7].只写下算法就行,不用具体程序,谢谢 展开
在数组中一个数相加时候,也就是数组本身是[2,2,3],数组中两两相加的可能结果有[4,5],三个数都相加的结果是[7],整合起来,不算重复的结果就是[2,3,4,5,7].只写下算法就行,不用具体程序,谢谢 展开
2个回答
展开全部
//做是做出来了,挺麻烦,且没做大量的验证,看得懂再说吧
import java.util.TreeSet;
public class AddCount {
public static void main(String[] args) {
int[] a={2,2,3};
addadd(a);
System.out.println(ts.toString());
}
private static void addadd(int[] a) {
diadd(0,2,a);//这里是特殊处理两两相加
diadd(0,a.length,a);
}
static TreeSet ts = new TreeSet();//有序不重复
static void diadd(int sdf, int cou, int[] a){
if(cou>2){
for(int i=0;i<a.length;i++){
sdf = a[i];
ts.add(sdf);
// System.out.println(ts.toString());
int[] b = new int[a.length-1];
for(int j=0;j<a.length;j++){
if(j<i)
b[j]=a[j];
if(j>i)
b[j-1]=a[j];
}
//a = Arrays.copyOf(a, a.length-1);
diadd(sdf,cou-1,b);
}
}else{
for(int i=0;i<a.length;i++){
int tem = sdf + a[i];
for(int j=0;j<a.length;j++){
if(j!=i)
ts.add(tem+a[j]);
}
}
// System.out.println(ts.toString());
}
}
}
import java.util.TreeSet;
public class AddCount {
public static void main(String[] args) {
int[] a={2,2,3};
addadd(a);
System.out.println(ts.toString());
}
private static void addadd(int[] a) {
diadd(0,2,a);//这里是特殊处理两两相加
diadd(0,a.length,a);
}
static TreeSet ts = new TreeSet();//有序不重复
static void diadd(int sdf, int cou, int[] a){
if(cou>2){
for(int i=0;i<a.length;i++){
sdf = a[i];
ts.add(sdf);
// System.out.println(ts.toString());
int[] b = new int[a.length-1];
for(int j=0;j<a.length;j++){
if(j<i)
b[j]=a[j];
if(j>i)
b[j-1]=a[j];
}
//a = Arrays.copyOf(a, a.length-1);
diadd(sdf,cou-1,b);
}
}else{
for(int i=0;i<a.length;i++){
int tem = sdf + a[i];
for(int j=0;j<a.length;j++){
if(j!=i)
ts.add(tem+a[j]);
}
}
// System.out.println(ts.toString());
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询