一组数字 任意个数数字相加的和等于指定的数字。 比如数字集合 1,2,3, 4,5,6 ,列出所有数字相加等于6的可能性,那么结果有:1+2+3,2+4, 主要这里的结果不是数组打乱顺序相加,而是按照数组顺序取任意个数相加减,所有大家看到结果只有1+2+3而没有1+3+2或则3+2+1
step1、实体类:
static class TestDTO {
String id; //id
Integer num;//数字
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
step2、实现方法:
public static List<List<TestDTO>> Test(List<TestDTO> dtoParam,Integer samplesNumber) {
List<List<TestDTO>> reust = new ArrayList<List<TestDTO>>();
int a=1;
int c=1;
List<TestDTO> d=null;
for (int i = 0; i < dtoParam.size(); i++) {
int s = dtoParam.get(i).getNum();
StringBuffer str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示,和逻辑无关
boolean bb=true;
while(bb){
if(bb=false){
break;
}
if(dtoParam.size()==a){
bb=false;
break;
}
boolean b=true;
while(b){
if(dtoParam.size()==c){
a++;
b=false;
c=a;
break;
}
d = new ArrayList<TestDTO>();
d.add(dtoParam.get(i));
for(int j=c;j<dtoParam.size();j++){
s = s + dtoParam.get(j).getNum();
d.add(dtoParam.get(j));
str.append(dtoParam.get(j).getNum()+"+");//用于控制台打印显示,和逻辑无关
System.out.println(str.substring(0,str.length()-1));//用于控制台打印显示,和逻辑无关
if (s == samplesNumber) {
reust.add(d);
break;
}
if(dtoParam.size()-j==1){
s = dtoParam.get(i).getNum();
str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示,和逻辑无关
c++;
break;
}
}
}
}
}
return reust;
}
step3、测试方法:
public static void main(String[] args) {
//模拟一个数字集合
//模拟一个数字集合
List<TestDTO> l=new ArrayList<TestDTO>();
for(int i=1;i<10;i++){
TestDTO d=new TestDTO();
d.setId(i+"");
d.setNum(i);
l.add(d);
}
List<List<TestDTO>> list= Test(l,6);
for (int i=0;i<list.size();i++){
String str="";
for(int j=0;j<list.get(i).size();j++){
str=str+list.get(i).get(j).getNum()+"+";
}
System.out.println("第"+i+"个结果:"+str.substring(0,str.length()-1));
}
}
step4、输出结果:
控制台输出所有数字相加的情况
1+2
1+2+3
1+2+3+2
1+2+3+2+3
1+2+3+2+3+4
1+2+3+2+3+4+5
1+2+3+2+3+4+5+6
1+2+3+2+3+4+5+6+7
1+2+3+2+3+4+5+6+7+8
1+2+3+2+3+4+5+6+7+8+9
1+3
1+3+4
1+3+4+5
1+3+4+5+6
1+3+4+5+6+7
1+3+4+5+6+7+8
1+3+4+5+6+7+8+9
1+4
1+4+5
1+4+5+6
1+4+5+6+7
1+4+5+6+7+8
1+4+5+6+7+8+9
1+5
1+5+5
1+5+5+6
1+5+5+6+7
1+5+5+6+7+8
1+5+5+6+7+8+9
1+6
1+6+7
1+6+7+8
1+6+7+8+9
1+7
1+7+8
1+7+8+9
1+8
1+8+9
1+9
2+3
2+3+4
2+3+4+5
2+3+4+5+6
2+3+4+5+6+7
2+3+4+5+6+7+8
2+3+4+5+6+7+8+9
2+4
2+4+4
2+4+4+5
2+4+4+5+6
2+4+4+5+6+7
2+4+4+5+6+7+8
2+4+4+5+6+7+8+9
2+5
2+5+6
2+5+6+7
2+5+6+7+8
2+5+6+7+8+9
2+6
2+6+7
2+6+7+8
2+6+7+8+9
2+7
2+7+8
2+7+8+9
2+8
2+8+9
2+9
3+4
3+4+5
3+4+5+6
3+4+5+6+7
3+4+5+6+7+8
3+4+5+6+7+8+9
3+5
3+5+6
3+5+6+7
3+5+6+7+8
3+5+6+7+8+9
3+6
3+6+7
3+6+7+8
3+6+7+8+9
3+7
3+7+8
3+7+8+9
3+8
3+8+9
3+9
4+5
4+5+6
4+5+6+7
4+5+6+7+8
4+5+6+7+8+9
4+6
4+6+7
4+6+7+8
4+6+7+8+9
4+7
4+7+8
4+7+8+9
4+8
4+8+9
4+9
5+6
5+6+7
5+6+7+8
5+6+7+8+9
5+7
5+7+8
5+7+8+9
5+8
5+8+9
5+9
6+7
6+7+8
6+7+8+9
6+8
6+8+9
6+9
7+8
7+8+9
7+9
8+9
最后筛选结果:
第0个结果:1+2+3=6
第1个结果:1+5=6
第2个结果:2+4=6