zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MySQL进阶
    对象关系_many2many
    objectstate对象三种状态
    自动在数据库中创建表
    Pytest学习之使用多个fixture
    Pytest学习之fixture作用范围(scope)
    python测试dubbo类型接口
    swagger接口注释添加,接口版本变更规则
    Pytest-skip跳过功能
    接口自动化测试介入项目管理流程
  • 原文地址:https://www.cnblogs.com/guchunchao/p/11745193.html
Copyright © 2011-2022 走看看