专栏首页cwl_JavaJava工具集-从N个元素里面取M个指定长度的组合列表

Java工具集-从N个元素里面取M个指定长度的组合列表

代码示例

import java.util.ArrayList;
import java.util.List;

/**
 * @program: simple_tools
 * @description: 从N个元素里面取M个指定长度的组合列表
 * @author: Mr.chen
 * @create: 2020-06-08 17:24
 **/
public class CombinationUtil {

    public static <T> List<List<T>> combiantion(T[] datas, int number) {
        if ((datas == null) || (datas.length == 0) || (datas.length < number)) {
            return null;
        }
        List<List<T>> combines = new ArrayList<List<T>>();
        List<T> temps = new ArrayList<T>();

        combine(datas, 0, number, temps, combines);
        return combines;
    }

    public static <T> void combine(T[] datas, int begin, int number, List<T> temps, List<List<T>> combines) {
        if (number == 0) {
            List<T> aCombine = new ArrayList<T>();
            aCombine.addAll(temps);
            combines.add(aCombine);
            return;
        }
        if (begin == datas.length) {
            return;
        }
        temps.add(datas[begin]);
        combine(datas, begin + 1, number - 1, temps, combines);
        temps.remove(datas[begin]);
        combine(datas, begin + 1, number, temps, combines);
    }

    public static void main(String args[]) {
        Character chs[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
        List<List<Character>> combines = combiantion(chs, 3);
        for (List<Character> data : combines) {
            System.out.println(data.toString());
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java工具集-集合(CollectionUtils)

    cwl_java
  • 快速学习-ElasticaSearch6.2.1集群管理

    ES通常以集群方式工作,这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力,同时也增加了系统的 容错能力及高可用,ES可以实现PB级数据的搜索。

    cwl_java
  • 快速学习-Feign远程调用

    在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用...

    cwl_java
  • Zookeeper vs etcd vs Consul

    【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考。 如果使用预定义的端口,服务越多,发...

    sunsky
  • [剑指offer][Java]滑动窗口的最大值

    链接:https://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788 ...

    后端技术漫谈
  • Nginx如何开启配置多个证书

    nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过...

    云知识Online
  • 基于 Docker 和 Kubernetes 的微服务实践

    微服务 是将单一的应用程序拆分成多个微小的服务,各个小服务之间松耦合,高内聚,每个小的服务可以单独进行开发,不依赖于具体的编程语言,也可以使用不同的数据存储技术...

    Java帮帮
  • python -m 和 python 直接运行的区别

    于小勇
  • TLD跟踪算法介绍

    TLD跟踪算法介绍 ? TLD(Tracking-Learning-Detection)是一种长时视频对象跟踪算法,首先要在视频一帧中指明对象位置,Tracki...

    OpenCV学堂
  • 云计算是否真的对企业来说无所不能?

    云计算是并行计算、分布式计算和网格计算的发展,或者说是这些计算科学概念的商业实现。它将计算任务分布在大量计算机构成的资源池上,使用户能够按需获取计...

    云计算爱好者

扫码关注云+社区

领取腾讯云代金券