「java列出组合」java中对象的组合
本篇文章给大家谈谈java列出组合,以及java中对象的组合对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java编程n个集合每次从每个集合里面取出一个元素组成一个字符串列出所有组合算法
- 2、java双色球排列组合算法 - 根据复式列出所有单式号码
- 3、使用java,列举所有给定数组中和为定值的组合
- 4、java 列出一个字符串的全字符组合情况,不考虑重复字符
- 5、关于各种排列组合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中对象的组合的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。