code:

import org.assertj.core.util.Lists;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; /**
* https://blog.csdn.net/yhyr_ycy/article/details/52523243
*
* @param <E>
*/
public class Combine<E> {
private List<List<E>> resList = Lists.newArrayList(); public List<List<E>> combine(List<E> srcList, int require) {
resList.clear();
if (require < 0) {
throw new IllegalArgumentException("");
}
if (srcList == null || srcList.size() == 0) {
return Lists.newArrayList();
}
if (require == 1) {
srcList.forEach(src -> resList.add(Collections.singletonList(src)));
return resList;
}
if (require == srcList.size()) {
return resList = Collections.singletonList(srcList);
}
combinerSelect(srcList, new ArrayList<>(), srcList.size(), require);
return resList;
} private void combinerSelect(List<E> srcList, List<E> workSpace, int n, int require) {
List<E> copyData;
List<E> copyWorkSpace; if (workSpace.size() == require) {
List<E> newL = Lists.newArrayList();
newL.addAll(workSpace);
resList.add(newL);
} for (int i = 0; i < srcList.size(); i++) {
copyData = new ArrayList<>(srcList);
copyWorkSpace = new ArrayList<>(workSpace); copyWorkSpace.add(copyData.get(i));
for (int j = i; j >= 0; j--) {
copyData.remove(j);
}
combinerSelect(copyData, copyWorkSpace, n, require);
}
}
}

test:


import com.y.Combine;
import org.assertj.core.util.Lists;
import org.junit.Test; import java.util.List; public class CombineTest {
@Test
public void test_combine() {
Combine<String> combine = new Combine<>();
List<String> testList = Lists.newArrayList("a", "b", "c", "d", "e");
List<List<String>> res = combine.combine(null, 3);
System.out.println(res);
res = combine.combine(Lists.newArrayList(), 3);
System.out.println(res);
res = combine.combine(testList, 1);
System.out.println(res);
res = combine.combine(testList, 3);
System.out.println(res);
res = combine.combine(testList, 5);
System.out.println(res);
// res = combine.combine(testList, -1);
// System.out.println(res);
}
}

算法-Java组合的更多相关文章

  1. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  2. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  3. 堆排序算法 java 实现

    堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ...

  4. Atitit 电子商务订单号码算法(java c# php js 微信

    Atitit 电子商务订单号码算法(java c# php js  微信 1.1. Js版本的居然钱三爷里面没有..只好自己实现了. 1.2. 订单号标准化...长度16位 1.3. 订单号的结构 前 ...

  5. 无向图的最短路径算法JAVA实现

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  6. 无向图的最短路径算法JAVA实现(转)

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  7. 基于FP-Tree的关联规则FP-Growth推荐算法Java实现

    基于FP-Tree的关联规则FP-Growth推荐算法Java实现 package edu.test.ch8; import java.util.ArrayList; import java.util ...

  8. 双色球机选算法java实现

    双色球机选算法java实现 一.代码 package com.hdwang; import java.util.Random; /** * Created by admin on 2017/1/10. ...

  9. Floyd算法java实现demo

    Floyd算法java实现,如下: https://www.cnblogs.com/Halburt/p/10756572.html package a; /** * ┏┓ ┏┓+ + * ┏┛┻━━━ ...

随机推荐

  1. Pandas Dataframe增、删、改、查、去重、抽样基本操作

    总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...

  2. Docker 镜像操作

    列出镜像列表 我们可以使用 docker images 来列出本地主机上的镜像. runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREA ...

  3. Redis面试题及分布式集群

    Reference: http://blog.csdn.net/yajlv/article/details/73467865 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似 ...

  4. spring中xml配置方式和注解annoation方式(包括@autowired和@resource)的区别

    xml文件中配置itemSqlParameterSourceProvider是可以的: <bean id="billDbWriter" class="com.aa. ...

  5. JAVA-JSP内置对象之request获得参数的所有参数值(多个值)

    相关资料:<21天学通Java Web开发> 获得参数的所有参数值(多个值)1.需要使用request对象的getParameterValues()方法. RequestForm4.jsp ...

  6. js使用正则替换掉所有的“”

    需求,使用bootstrap 的 summernote上传图片,转换成文件流,上传给后台,上传用json传送,不能有“” content = content.replace(/\"/ig,& ...

  7. java基础篇---文件上传(smartupload组件)

    文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本篇主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用 ...

  8. Java局部打印的问题

    项目中遇到了做局部打印的情况,最开始用的bootstrap,可是实际显示的和打印的效果就不一样了,于是就只能换一种方式了. 打印是用的jqprint 这个插件,很简单好用的插件. 引入两个js就可以了 ...

  9. [转]mysql的full join的实现

    原文地址:https://blog.csdn.net/qq_1017097573/article/details/52638360 数据库多表查询主要有以下几种 inner join内连接查询,只有两 ...

  10. java泛型中<? super String>和<? extends String> 的区别

    (1)<? super String> is any class which is a superclass of String (including String itself). (I ...