算法-Java组合
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组合的更多相关文章
- 归并排序算法 java 实现
		归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ... 
- 快速排序算法 java 实现
		快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ... 
- 堆排序算法 java 实现
		堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ... 
- Atitit 电子商务订单号码算法(java c# php js  微信
		Atitit 电子商务订单号码算法(java c# php js 微信 1.1. Js版本的居然钱三爷里面没有..只好自己实现了. 1.2. 订单号标准化...长度16位 1.3. 订单号的结构 前 ... 
- 无向图的最短路径算法JAVA实现
		一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ... 
- 无向图的最短路径算法JAVA实现(转)
		一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ... 
- 基于FP-Tree的关联规则FP-Growth推荐算法Java实现
		基于FP-Tree的关联规则FP-Growth推荐算法Java实现 package edu.test.ch8; import java.util.ArrayList; import java.util ... 
- 双色球机选算法java实现
		双色球机选算法java实现 一.代码 package com.hdwang; import java.util.Random; /** * Created by admin on 2017/1/10. ... 
- Floyd算法java实现demo
		Floyd算法java实现,如下: https://www.cnblogs.com/Halburt/p/10756572.html package a; /** * ┏┓ ┏┓+ + * ┏┛┻━━━ ... 
随机推荐
- chrome安装HTTP测试扩展
			chrome安装HTTP测试扩展 扩展名: DHC 
- Node.js学习笔记(3)--url.parse方法
			说明(2017-5-2 14:23:47): 1. index.html <!DOCTYPE html> <html lang="en"> <head ... 
- 基于QT和OpenCV的人脸检測识别系统(2)
			紧接着上一篇博客的讲 第二步是识别部分 人脸识别 把上一阶段检測处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸相应的人是谁(此处以白色文本显示). 人脸预处理 如今你已经得到一张人脸,你能 ... 
- git拉取远程分支
			查看本地所有分支列表: git branch -a 查看远程所有分支列表: git branch -r 拉取远程分支(使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checko ... 
- swift,NSUserDefaults的swift化封装
			NSUserDefaultshtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror- ... 
- C++实现的服务不可用发送报警邮件
			正在看C++,我主业是Java开发,但是最近服务不太稳定,自己用C++造了个小轮子. 配置好要监控的访问路径,IP.端口号和路径.涉及到的知识点有以下几个部分: 构造函数与析构函数 内存的分配与释放( ... 
- html超链接,锚点以及特殊字符
			超链接 <a></a>中不加东西是显示不了的. href:跳转的地址 target:_self(本页面打开,默认选项),_blank(新页面打开) title:文本提示 空链接 ... 
- C++学习笔记(HelloWorld,类型和值)
			现在有一个从控制台读取输入的小程序: #include "../std_lib_facilities.h" int main() { cout << "Ple ... 
- [uboot]uboot中run的一些command在源码位置
			如在uEnv.txt中, loadfdt=fatload mmc ${mmcdev}: ${fdtaddr} ${fdtfile} fdtboot=run mmc_args; bootz ${load ... 
- if 语句练习    身高体重问题
			public class d { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ... 
