java中的排列组合

?





1

使用之前需要声明一个Combine的对象,调用startCombile方法,可返回想要的组合数或者个数,参数介绍很重要

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<br>

public class Combine {

    private
Object[] oldArr;

    private
Object[] newArr;

    private
List<Object[]> list=new
ArrayList<Object[]>();

    private
int needLength;

    private
int count;

    private
boolean flag;

    

    /**

     * 例如我要在5个数中取个,那么arr就是包含这五个的数组,needLength就是3

     * @param arr  要进行的数组

     * @param needLength    需要的个数

     * @param flag  true代表返回一个list,list里包含了所有的组合情况;false代表返回一个数字,这个数字就是所有组合的个数

     * @return

     * 此方法为运行入口

     */

    public
Object startCombile(Object[] arr,int
needLength,boolean
flag){

        this.needLength=needLength;

        this.oldArr=arr;

        this.newArr=new
Object[needLength];

        this.flag=flag;

        getCombineResult(this.oldArr.length,needLength);

        if(flag){

            return
list;

        }else{

            return
count;

        }

    }

    private
void getCombineResult(int
sum,int length){

        //5中3个 sum代表5,length代表3,因为递归,到最后肯定是n个里面取1个,当取1个的时候一层递归就结束了,会返回到上一层继续递归

        if(length>0){

            for(int
i=oldArr.length-sum;i<oldArr.length;i++){

                newArr[needLength-length]=oldArr[i];

                if(length==1){

                    if(flag){

                        Object[] myArr=new
Object[needLength];

                        for(int
j=0;j<newArr.length;j++){

                            myArr[j]=newArr[j];

                        }

                        list.add(myArr);

                    }else{

                        count++;

                    }

                }

                sum--;

                getCombineResult(sum,length-1);

            }

        }

    }

    

    

}

  

java中的排列组合,布布扣,bubuko.com

时间: 2024-10-08 21:15:08

java中的排列组合的相关文章

java中关于排列和组合的有关算法

收集的排列加组合的各种算法,还有待完善: 一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用 import java.util.Arrays; //利用二进制算法进行全排列 //count1:170187 //count2:291656 public class test { public static void main(String[] args) { long start=System.currentTimeMillis(); count2();

java 中继承,组合,重载,重写的实现原理 (转)

我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似的效果,就是提高代码的复用. 组合很简单也很直观,就是在一个类中直接引用另一个类,然后调用引用类的一些方法来完成一些功能,适合领域模型中has-a关系的实现:而继承则适合领域模型中is-a关系的实现. 其实在Java内部,是通过隐式的组合来实现继承的. 子类对象中会保存一个实例对象的引用super,

Java中的继承与组合

本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到底应该选择继承还是组合. 1.继承 假设我们有一个名为Insect(昆虫)的类,这个类包含两个方法:1)移动move(): 2)攻击attack(). 代码如下: class Insect { private int size; private String color; public Insect

菜鸟译文(一)——Java中的继承和组合

阅读英文的能力对于程序员来说,是很重要的.这几年也一直在学习英文,今天心血来潮,就在网上找了一篇简短的博文翻译一下.水平一般,能力有限,还请各位看官多多指点. 译文: 本文将会举例说明Java中继承和组合的概念.首先举一个继承的例子,然后展示一下如何用组合来改善继承的设计.最后概括一下如何在它们之间做出选择. 1. 继承 假设我们有一个Insect类.这个类包含两个方法:一个是move(),一个是attack(). class Insect { private int size; private

Java中的继承与组合(转载)

本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到底应该选择继承还是组合. 1.继承 假设我们有一个名为Insect(昆虫)的类,这个类包含两个方法:1)移动move(): 2)攻击attack().代码如下: class Insect { private int size; private String color; public Insect(

新秀翻译(一个)——Java在继承和组合

阅读英文的程序猿的能力,这是非常重要的.过去的几年中一直在学习英语,今天心血来潮,在网上找什么鲍文简要翻译. 普通级,能力有限,看官还请大家多多指点. 译文: 本文将会举例说明Java中继承和组合的概念.首先举一个继承的样例.然后展示一下怎样用组合来改善继承的设计.最后概括一下怎样在它们之间做出选择. 1. 继承 假设我们有一个Insect类.这个类包括两个方法:一个是move().一个是attack(). class Insect { private int size; private Str

【Java中 任意几个数字获取其所有的排列组合】

今天在工作中碰到一个问题,在java中输入比如1,2,3  三个数 我想要得到其所有的排列组合 比如 123,312,132,231,213,321 这些 上网找了找别人的算法,稍加整理,分享给大家代码如下 import java.util.Arrays;                        //用于数组输出. import java.util.LinkedList; import java.util.List; public class test { static String to

面试题:一个整型数组中各元素排列组合得到的最大的一个数 ,比如,1,3,9,11,23,233,911 要得到:9,911,3,233,23,11,1

package com.alibaba.interview; import java.util.Random; /** * @Author: weblee * @Email: [email protected] * @Blog: http://www.cnblogs.com/lkzf/ * @Time: 2014年10月25日下午2:58:39 * ************* function description *************** *一个整型数组中各元素排列组合得到的最大的一个

TODO:排列组合问题:n个数中取m个

排列组合是组合学最基本的概念.所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序.组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序.排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数. 排列组合与古典概率论关系密切. 本文示例实现的功能是"按顺序"从n个数中取m个数,如1,2,3,4,5,6取5个数字是:1,2,3,4,5:1,2,3,4,6:2,3,4,5,6.示例代码有javascript,php,golang,如果雷同,纯属学术研究,作为一种记