Java 集合数组 任意个数数字相加等于一个指定的数
Posted 超轶绝尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 集合数组 任意个数数字相加等于一个指定的数相关的知识,希望对你有一定的参考价值。
一组数字 任意个数数字相加的和等于指定的数字。 比如数字集合 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
以上是关于Java 集合数组 任意个数数字相加等于一个指定的数的主要内容,如果未能解决你的问题,请参考以下文章
leetcode刷题(java)-01-给定⼀个数组和⼀个⽬标和,从数组中找两个数字相加等于⽬标和,输出这两个数字的下标