當前位置:首頁 » 編程語言 » java排列組合函數

java排列組合函數

發布時間: 2023-12-02 08:27:19

java 定義了5個數字的數組,顯示輸出所有的排列組合

importjava.util.ArrayList;
importjava.util.List;
publicclassPermAComb{
staticList<int[]>allSorts=newArrayList<int[]>();

publicstaticvoidpermutation(int[]nums,intstart,intend){
if(start==end){//當只要求對數組中一個數字進行全排列時,只要就按該數組輸出即可
int[]newNums=newint[nums.length];//為新的排列創建一個數組容器
for(inti=0;i<=end;i++){
newNums[i]=nums[i];
}
allSorts.add(newNums);//將新的排列組合存放起來
}else{
for(inti=start;i<=end;i++){
inttemp=nums[start];//交換數組第一個元素與後續的元素
nums[start]=nums[i];
nums[i]=temp;
permutation(nums,start+1,end);//後續元素遞歸全排列
nums[i]=nums[start];//將交換後的數組還原
nums[start]=temp;
}
}
}

publicstaticvoidmain(String[]args){
int[]numArray={1,2,3,4,5,6};
permutation(numArray,0,numArray.length-1);
int[][]a=newint[allSorts.size()][];//你要的二維數組a
allSorts.toArray(a);

//列印驗證
for(inti=0;i<a.length;i++){
int[]nums=a[i];
for(intj=0;j<nums.length;j++){
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}

採納吧

㈡ java實現排列組合輸出

完成了一種實現,發給你參考下。

不過感覺應該還有更好的辦法,有時間我會繼續研究下.

importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Set;
publicclassTestQiuhe{
//集合a{1,2,3,5,7,10},輸出不多於4個元素(不重復)的加和為22的組合。
publicstaticvoidmain(String[]args){
int[]nums={1,2,3,5,7,10};
intl=nums.length;
List<int[]>results=newArrayList<int[]>();
for(inti1=0;i1<l;i1++){
for(inti2=0;i2<l;i2++){
if(nums[i1]==22){
results.add(newint[]{nums[i1]});
}
if(i2!=i1){
if(nums[i1]+nums[i2]==22){
results.add(newint[]{nums[i1],nums[i2]});
}
for(inti3=0;i3<l;i3++){
if(i3!=i1&&i3!=i2){
if(nums[i1]+nums[i2]+nums[i3]==22){
results.add(newint[]{nums[i1],nums[i2],nums[i3]});
}
for(inti4=0;i4<l;i4++){
if(i4!=i1&&i4!=i2&&i4!=i3){
if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==22){
results.add(newint[]{nums[i1],nums[i2],nums[i3],nums[i4]});
}
}
}
}
}
}
}
}
//去重
Set<String>reSet=newHashSet<>();
for(int[]r:results){
Arrays.sort(r);
reSet.add(Arrays.toString(r));
}
System.out.println("一共得到結果集:"+reSet.size());
System.out.println(reSet);
}
}

運行結果:

一共得到結果集:2

[[5, 7, 10], [2, 3, 7, 10]]

㈢ Java程序如何實現對字元串的排列組合問題

import java.math.BigInteger;
import java.util.*;

public class PermutationGenerator {

private int[] a;
private BigInteger numLeft;
private BigInteger total;
public PermutationGenerator(int n) {
if (n < 1) {
throw new IllegalArgumentException("Min 1");
}
a = new int[n];
total = getFactorial(n);
reset();
}

public void reset() {
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
numLeft = new BigInteger(total.toString());
}

public BigInteger getNumLeft() {
return numLeft;
}

public BigInteger getTotal() {
return total;
}

public boolean hasMore() {
return numLeft.compareTo(BigInteger.ZERO) == 1;
}

private static BigInteger getFactorial(int n) {
BigInteger fact = BigInteger.ONE;
for (int i = n; i > 1; i--) {
fact = fact.multiply(new BigInteger(Integer.toString(i)));
}
return fact;
}

public int[] getNext() {

if (numLeft.equals(total)) {
numLeft = numLeft.subtract(BigInteger.ONE);
return a;
}

int temp;

// Find largest index j with a[j] < a[j+1]

int j = a.length - 2;
while (a[j] > a[j + 1]) {
j--;
}

// Find index k such that a[k] is smallest integer
// greater than a[j] to the right of a[j]

int k = a.length - 1;
while (a[j] > a[k]) {
k--;
}

// Interchange a[j] and a[k]

temp = a[k];
a[k] = a[j];
a[j] = temp;

// Put tail end of permutation after jth position in increasing order

int r = a.length - 1;
int s = j + 1;

while (r > s) {
temp = a[s];
a[s] = a[r];
a[r] = temp;
r--;
s++;
}

numLeft = numLeft.subtract(BigInteger.ONE);
return a;

}
//程序測試入口
public static void main(String[] args) {

int[] indices;
String[] elements = { "a", "b", "c"};
PermutationGenerator x = new PermutationGenerator(elements.length);
StringBuffer permutation;

while (x.hasMore())
{
permutation = new StringBuffer("%");
indices = x.getNext();
for (int i = 0; i < indices.length; i++) {
permutation.append(elements[indices[i]]).append("%");
}
System.out.println(permutation.toString());

}
}

}

先給你一個看看!

㈣ 求java實現String list[] = { "1", "2", "3" }; 的排列組合代碼

對於這個問題,我首先需要糾正一下樓主的措辭,這是個組合問題,跟排列無關,用排列組合亦不恰當。下面說下我的想法
元素不能重復,首先應該去掉相同的元素,最好的辦法是用set來實現。參考api
Arrays.asList
set.addAll
其實呢,這個是一個遞歸的過程,考慮下面情況
對於數組
{「1」},它的組合數就是{「1」}。
如果再加上一個元素「2「到上面的數組中,那麼,如果這個」2「不用,實質上跟{"1"}的情況是一樣的,這與不能重復相矛盾,所以」2「一定要用,就是在"1"中再加上」2「;於是我們得到
對於數組{」1「,」2「}它的組合數是{」1「}
再加入一個{」2「}。也許你也考慮到另外一種情況,即」2「也是它的一個組合數,我們考慮丟了,為什麼呢,因為在{」1「}中實質上還有一個稱為空的集合。這樣的話,重新整理一下:
1.對於list
=
{"1"},它的組合包括
{"1"},以及
empty.
2.對於list={"1","2"},它的組合包括{」1「,」2「}(在{」1「}中加了」2「),{」2「}(在empty中加入」2「),也許你還會講還應該包括{」1「},但是這個{」1「}我們已經在第1步就已經算出來了,不用再考慮了。
按照這樣的規則進行下去,你會發現這樣就把所有的組合數遍歷出來了。要具體的代碼就等會兒,我現在有事。

㈤ 關於各種排列組合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= ;i<Math 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= ;m<str 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= ;i<num 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={ }; // ArrayList<Object[]> rs=RandomC(tmp); ArrayList<Object[]> rs=cmn(tmp ); for(int i= ;i<rs size();i++) { // System out print(i+"="); for(int j= ;j<rs get(i) length;j++) { System out print(rs get(i)[j]+" "); } System out println(); } }

// 求一個數組的任意組合 static ArrayList<Object[]> RandomC(Object[] source) { ArrayList<Object[]> result=new ArrayList<Object[]>(); if(source length== ) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;i<psource length;i++) { psource[i]=source[i]; } result=RandomC(psource); int len=result size();//fn組合的長度 result add((new Object[]{source[source length ]})); for(int i= ;i<len;i++) { Object[] tmp=new Object[result get(i) length+ ]; for(int j= ;j<tmp length ;j++) { tmp[j]=result get(i)[j]; } tmp[tmp length ]=source[source length ]; result add(tmp); } } return result; } static ArrayList<Object[]> cmn(Object[] source int n) { ArrayList<Object[]> result=new ArrayList<Object[]>(); if(n== ) { for(int i= ;i<source 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= ;i<psource length;i++) { psource[i]=source[i]; } result=cmn(psource n); ArrayList<Object[]> tmp=cmn(psource n ); for(int i= ;i<tmp size();i++) { Object[] rs=new Object[n]; for(int j= ;j<n ;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); } }

下面是求排列

復制代碼 代碼如下: lishixin/Article/program/Java/JSP/201311/20148

㈥ JAVA排列組合演算法如題:用x、y,求出指定長度的所有排列組合。

按照你的要求編寫的求x,y指定長度的所有排列組合的Java程序如下

importjava.util.ArrayList;
importjava.util.List;
publicclassEE{
publicstaticvoidcombination(List<String>list,StringsNumbers,StringsPath,intALen)
{
if(sPath.length()==ALen)
{
list.add(sPath);
return;
}
for(inti=0;i<sNumbers.length();i++)
{

combination(list,sNumbers,sPath+sNumbers.substring(i,i+1),ALen);
}
}
publicstaticvoidmain(String[]args){
List<String>output=newArrayList<String>();
System.out.println("組合");
combination(output,"xy","",5);
for(Strings:output)
System.out.print(s+"");
System.out.println();
System.out.println("共"+output.size()+"個");
}
}

運行結果

組合

xxxxx xxxxy xxxyx xxxyy xxyxx xxyxy xxyyx xxyyy xyxxx xyxxy xyxyx xyxyy xyyxx xyyxy xyyyx xyyyy yxxxx yxxxy yxxyx yxxyy yxyxx yxyxy yxyyx yxyyy yyxxx yyxxy yyxyx yyxyy yyyxx yyyxy yyyyx yyyyy

共32個

熱點內容
世界服務密碼是多少 發布:2025-01-25 04:42:52 瀏覽:48
專車配置有哪些 發布:2025-01-25 04:42:46 瀏覽:569
java培訓班收費 發布:2025-01-25 04:37:53 瀏覽:766
密碼鎖如何密碼解鎖 發布:2025-01-25 04:25:16 瀏覽:385
ebay如何上傳產品 發布:2025-01-25 04:04:37 瀏覽:823
java判斷是否手機訪問許可權 發布:2025-01-25 04:02:28 瀏覽:807
天龍八部3困難福地需要什麼配置 發布:2025-01-25 04:01:49 瀏覽:409
phpmysql網站源碼 發布:2025-01-25 03:56:49 瀏覽:755
安卓手機華為手機哪個牌子好 發布:2025-01-25 03:55:55 瀏覽:25
比亞迪發動機壓縮比 發布:2025-01-25 03:55:16 瀏覽:329