「java列出组合」java中对象的组合

博主:adminadmin 2023-01-26 17:54:09 340

本篇文章给大家谈谈java列出组合,以及java中对象的组合对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java编程n个集合每次从每个集合里面取出一个元素组成一个字符串列出所有组合算法

import java.util.ArrayList;

import java.util.List;

public class XX {

 

    public static void main(String[] args)  

    {  

        String[] arr1 = { "1", "2","3","4"};  

        String[] arr2 = { "a", "b","c","d" };  

        String[] arr3 = { "A","B","G","H" };  

        ListString[] list = new ArrayListString[]();  

        list.add(arr1);  

        list.add(arr2);  

        list.add(arr3);  

        test(list, arr1, "");  

    }  

  

    public static void test(ListString[] list, String[] arr, String str)  

    {  

        for (int i = 0; i  list.size(); i++)  

        {  

            //取得当前的数组  

            if (i == list.indexOf(arr))  

            {  

                //迭代数组  

                for (String st : arr)  

                {  

                    st = str + st;  

                    if (i  list.size() - 1)  

                    {  

                        test(list, list.get(i + 1), st);  

                    }  

                    else if (i == list.size() - 1)  

                    {  

                        System.out.println(st);  

                    }  

                }  

            }  

        }  

    }  

}

计算结果:

1aA

1aB

1aG

1aH

1bA

1bB

1bG

1bH

1cA

1cB

1cG

1cH

1dA

1dB

1dG

1dH

2aA

2aB

2aG

2aH

2bA

2bB

2bG

2bH

2cA

2cB

2cG

2cH

2dA

2dB

2dG

2dH

3aA

3aB

3aG

3aH

3bA

3bB

3bG

3bH

3cA

3cB

3cG

3cH

3dA

3dB

3dG

3dH

4aA

4aB

4aG

4aH

4bA

4bB

4bG

4bH

4cA

4cB

4cG

4cH

4dA

4dB

4dG

4dH

java双色球排列组合算法 - 根据复式列出所有单式号码

//C ( n , k )

public class SelectK {

public static int[] nums = {1, 2, 3,4,5,6,7};

public static ArrayListArrayListInteger result = new ArrayList();

public static void select(ArrayListInteger inner, int start, int k) {

for(int i=start; inums.length; i++) {

inner.add(nums[i]);

if (inner.size() == k) {

result.add(new ArrayList(inner));

inner.remove(inner.size()-1);

continue;

}

select(inner, i+1, k);

inner.remove(inner.size()-1);

}

}

public static void main(String[] args) {

ArrayListInteger inner = new ArrayList();

int k = 6;

select(inner, 0, k);

for(ArrayListInteger each: result) {

System.out.println(StringUtils.join(each, ","));

}

}

}

使用java,列举所有给定数组中和为定值的组合

import java.util.Arrays;

/**

* 列举数组中任意元素和为定值的组合

*/

public class SolveProb {

// Arrays.sort(arr);

static int[] flag = new int[100];

static int index = 0;// 记录当前

public SolveProb() {

}

public static void numGroup(int[] arr, int start, int length, int sum) {

if (sum == 0) {

for (int j = 0; j index; j++) {

System.out.print(flag[j]);

}

System.out.println();

} else {

for (int i = start; i length; i++) {

flag[index++] = arr[i];

SolveProb.numGroup(arr, i + 1, length-1, sum - arr[i]);

}

}

index--;

}

public static void main(String[] args) {

int[] arr = { 1, 3, 2, 4, 5, 6, 7, 8, 9 };

Arrays.sort(arr);

int sum = 7;

SolveProb.numGroup(arr, 0, arr.length, sum);

}

}

java 列出一个字符串的全字符组合情况,不考虑重复字符

package zhidao;

import java.util.Arrays;

import java.util.LinkedList;

public class RecursionSub3Sort

{

static int count = 0;

static char[] array = { 'a', 'b', 'c' };

static LinkedListchar[] list = new LinkedListchar[] ();

static int[] indexs = new int[3];

static int len = array.length;

public static void main ( String[] args )

{

getSub ();

for ( char[] cs : list )

{

System.out.println (Arrays.toString (cs));

}

}

private static LinkedListchar[] getSub ()

{

while (count = len)

{

recursionSub (0, -1);

count++;

}

return list;

}

private static LinkedListchar[] recursionSub ( int ind, int start )

{

start++;

if (start  count - 1)

{

return null;

}

for ( indexs

本篇文章给大家谈谈java列出组合,以及java中对象的组合对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

 = 0; indexs

本篇文章给大家谈谈java列出组合,以及java中对象的组合对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

  len; indexs

本篇文章给大家谈谈java列出组合,以及java中对象的组合对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

++ )

{

recursionSub (0, start);

if (start == count - 1)

{

char[] temp = new char[count];

for ( int i = count - 1; i = 0; i-- )

{

temp[start - i] = array[indexs[start - i]];

}

if (temp.length == 1

|| Arrays.toString (temp).replaceAll ("[\\[\\]\\s,]", "").replaceAll ("(\\w)\\1+", "$1")

.length () != 1)

{

list.add (temp);

}

}

}

return list;

}

}

关于各种排列组合java算法实现方法

一 利用二进制状态法求排列组合 此种方法比较容易懂 但是运行效率不高 小数据排列组合可以使用

复制代码 代码如下: import java util Arrays;

//利用二进制算法进行全排列 //count : //count :

public class test { public static void main(String[] args) { long start=System currentTimeMillis(); count (); long end=System currentTimeMillis(); System out println(end start); } private static void count (){ int[] num=new int []{ }; for(int i= ;iMath pow( );i++){ String str=Integer toString(i ); int sz=str length(); for(int j= ;j sz;j++){ str=" "+str; } char[] temp=str toCharArray(); Arrays sort(temp); String gl=new String(temp); if(!gl equals(" ")){ continue; } String result=""; for(int m= ;mstr length();m++){ result+=num[Integer parseInt(str charAt(m)+"")]; } System out println(result); } } public static void count (){ int[] num=new int []{ }; int[] ss=new int []{ }; int[] temp=new int[ ]; while(temp[ ] ){ temp[temp length ]++; for(int i=temp length ;i ;i ){ if(temp[i]== ){ temp[i]= ; temp[i ]++; } } int []tt=temp clone(); Arrays sort(tt); if(!Arrays equals(tt ss)){ continue; } String result=""; for(int i= ;inum length;i++){ result+=num[temp[i]]; } System out println(result); } } }

二 用递归的思想来求排列跟组合 代码量比较大

复制代码 代码如下: package practice;

import java util ArrayList; import java util List;

public class Test {

/** * @param args */ public static void main(String[] args) { // TODO Auto generated method stub Object[] tmp={ }; // ArrayListObject[] rs=RandomC(tmp); ArrayListObject[] rs=cmn(tmp ); for(int i= ;irs size();i++) { // System out print(i+"="); for(int j= ;jrs get(i) length;j++) { System out print(rs get(i)[j]+" "); } System out println(); } }

// 求一个数组的任意组合 static ArrayListObject[] RandomC(Object[] source) { ArrayListObject[] result=new ArrayListObject[](); if(source length== ) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;ipsource length;i++) { psource[i]=source[i]; } result=RandomC(psource); int len=result size();//fn组合的长度 result add((new Object[]{source[source length ]})); for(int i= ;ilen;i++) { Object[] tmp=new Object[result get(i) length+ ]; for(int j= ;jtmp length ;j++) { tmp[j]=result get(i)[j]; } tmp[tmp length ]=source[source length ]; result add(tmp); } } return result; } static ArrayListObject[] cmn(Object[] source int n) { ArrayListObject[] result=new ArrayListObject[](); if(n== ) { for(int i= ;isource length;i++) { result add(new Object[]{source[i]}); } } else if(source length==n) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;ipsource length;i++) { psource[i]=source[i]; } result=cmn(psource n); ArrayListObject[] tmp=cmn(psource n ); for(int i= ;itmp size();i++) { Object[] rs=new Object[n]; for(int j= ;jn ;j++) { rs[j]=tmp get(i)[j]; } rs[n ]=source[source length ]; result add(rs); } } return result; }

}

三 利用动态规划的思想求排列和组合

复制代码 代码如下: package Acm; //强大的求组合数 public class MainApp { public static void main(String[] args) { int[] num=new int[]{ }; String str=""; //求 个数的组合个数 // count( str num ); // 求 n个数的组合个数 count ( str num); }

private static void count (int i String str int[] num) { if(i==num length){ System out println(str); return; } count (i+ str num); count (i+ str+num[i]+" " num); }

private static void count(int i String str int[] num int n) { if(n== ){ System out println(str); return; } if(i==num length){ return; } count(i+ str+num[i]+" " num n ); count(i+ str num n); } }

下面是求排列

复制代码 代码如下: lishixinzhi/Article/program/Java/JSP/201311/20148

关于java列出组合和java中对象的组合的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。