當前位置:首頁 » 操作系統 » java組合排列演算法

java組合排列演算法

發布時間: 2022-03-12 22:33:22

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個

❷ JAVA 全排列演算法

遞歸實現,取數字(字元串)中第i個位置的字元,然後將他和剩餘的字元拼接,剩餘的字元串當成有一個全排列的輸入,這樣遞歸下去,只剩一個字元時全排列就是本身。程序中使用set去除了重復的數據,如果需要保留,將set換為list介面即可。

package mytest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/*
* @date:2012-2-8
* @author:
*
* 輸入一個數字,講輸出 1到這個數字的全排列
*/
public class MyDemo2 {

private static Set<String> SET_STRING = new HashSet<String>();
private static Set<Long> SET_NUM = new HashSet<Long>();

public static void main(String[] args) {
System.out.println("begin ...... ");
testLong(234);
testString("a23");

print(SET_NUM);
print(SET_STRING);
System.out.println("end ...... ");
}

/**
* 測試數字
* @param num
*/
private static void testLong(long num){
long testNum = num;
String[] permutation;

for(long l=0; l<=testNum; l++){
permutation = getAllOrder(String.valueOf(l));
for (int i = 0; i < permutation.length; i++) {
SET_NUM.add(Long.valueOf(permutation[i]));
}
}
}

/**
* 測試字元串
* @param str
*/
private static void testString(String str){
String[] permutation = getAllOrder(str);
for (int i = 0; i < permutation.length; i++) {
SET_STRING.add(permutation[i]);
}
}

private static void print(Set set){
System.out.println("/*****************************************************/");
int i=0;
for(Iterator it = set.iterator(); it.hasNext();){
i++;
if(i%10 == 0){
System.out.println();
}
System.out.print(it.next() + " ");
}
System.out.println();
System.out.println("/*****************************************************/");
}

/**
* 遞歸演算法 全排列 去除重復
* @param str
* @return
*/
private static String[] getAllOrder(String str) {
String [] arrResult = null;
Set<String> set = new HashSet<String>();

if(str.length()>1){
String result = "";
String charXInString;
String remainString;
for (int i = 0; i < str.length(); i++) {
charXInString = str.charAt(i) + "";
remainString = str.substring(0, i)+ str.substring(i + 1, str.length());
for (String element : getAllOrder(remainString)) {
result = charXInString + element;
set.add(result);
}
}
arrResult = set.toArray(new String[set.size()]);
}else{
arrResult = new String[]{str};
}
return arrResult;
}

}

❸ 在java中,誰有好的演算法可以將多個list進行組合

//回答完畢,採納即可

importjava.util.Arrays;
importjava.util.LinkedList;

publicclassTT
{
privatestaticLinkedList<String[]>recursionSub(LinkedList<String[]>list,intcount,String[][]array,intind,
intstart,int...indexs)
{
start++;
if(start>count-1)
{
returnnull;
}
if(start==0)
{
indexs=newint[array.length];
}
for(indexs[start]=0;indexs[start]<array[start].length;indexs[start]++)
{
recursionSub(list,count,array,0,start,indexs);
if(start==count-1)
{
String[]temp=newString[count];
for(inti=count-1;i>=0;i--)
{
temp[start-i]=array[start-i][indexs[start-i]];
}
list.add(temp);
}
}
returnlist;
}

publicstaticvoidmain(String[]args)
{
String[]s1={"a","b","c"};
String[]s2={"d","e","f"};
String[]s3={"x","y","z"};
String[][]temp={s1,s2,s3};

LinkedList<String[]>list=newLinkedList<String[]>();
recursionSub(list,temp.length,temp,0,-1);
for(inti=0;i<list.size();i++)
{
System.out.println(Arrays.toString(list.get(i)).replaceAll("[\[\]\,\s]",""));
}
}
}

❹ JAVA模擬排列組合

全排列?
用指針啊

❺ java演算法問題 排列組合 給定一組字元串,產生所有可能的集合

這是我寫的一個取組合的方法:
package Combination.c3;
import java.util.ArrayList;
import java.util.List;

public class Combinations {

/*
* 設有n個元素,組合數量有2的n次方種。
* 對 0 到 2的n次方-1 中的每個數,考察其二進制位形式,位數為1代表相應元素加入
* 到組合,0則不加入該元素至組合。
*
* 取組合方法
* 參數: list ---- 原始數組
* 返回: 包含所有組合數組的數組
*/
public static List<List<Object>> getCombinations(List<Object> list) {
List<List<Object>> result = new ArrayList<List<Object>>();
long n = (long)Math.pow(2,list.size());
List<Object> combine;
for (long l=0L; l<n; l++) {
combine = new ArrayList<Object>();
for (int i=0; i<list.size(); i++) {
if ((l>>>i&1) == 1)
combine.add(list.get(i));
}
result.add(combine);
}
return result;
}

//測試
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");

List<List<Object>> result = getCombinations(list);
System.out.println(list.toString());
System.out.println(result.toString());
}

}

❻ java排列組合的演算法 譬如我有(A,B,C,D),我想輸出的結果是

importstaticjava.lang.System.*;
importjava.util.*;
publicclassTest{
publicstaticvoidmain(String...args){
ArrayList<String>l=newArrayList<String>();
out.println("請輸入要排序的字母,輸入$結束:");
while(true){
Scannersc=newScanner(in);
Stringstr=sc.nextLine();
if(str.equals("$"))break;
else
l.add(str);

}
Strings="";
System.out.println(s.isEmpty());
f(s,l);
}
staticvoidf(Strings,ArrayList<String>l){
if(s.isEmpty()){
for(inti=0;i<l.size();i++){
out.println(s+l.get(i));
if(i==l.size()-1)return;
f(s+l.get(i),l);
}
}else{
char[]c=newchar[1];
c[0]=s.charAt(s.length()-1);
Stringstr=newString(c);
for(inti=l.lastIndexOf(str);i<l.size();i++){
out.println(s+l.get(i+1));
if(i==l.size()-2)return;
f(s+l.get(i+1),l);
}
}
}
}
純手打實驗過了可以用..望採納,有不懂的歡迎發問

❼ JAVA 排列組合改進演算法 怎麼實現

publicclassTest{
publicstaticvoidmain(String[]args){
String[]arr1={"a","b","c"};
String[]arr2={"h","h","j"};
String[]arr3={"x","y",};
for(inti1=0;i1<arr1.length;i1++){
for(inti2=0;i2<arr2.length;i2++){
for(inti3=0;i3<arr3.length;i3++){
System.out.print("{"+arr1[i1]+","+arr2[i2]+","+arr3[i3]+"},");
}
}
}
}
}

你看看對不對

❽ 求一個排列組合演算法,需要有java源碼

私信我,給你發代碼。。。
希望可以幫助你,謝謝採納。。。

❾ 用JAVA寫一個a,b,c,d,e排列組合演算法,謝謝了

public class Paixu {
public static void main(String[] args) {
char[] in = "abcde".toCharArray();

new Paixu().paixu(in, in.length, 0);
}

private void paixu(char[] array, int n, int k) {
if (n == k) {
char[] out = new char[n];
for (int i = 0; i < array.length; i++) {
out[i] = array[i];
}
System.out.println(new String(out));
} else {
for (int i = k; i < n; i++) {
swap(array, k, i);
paixu(array, n, k + 1);
swap(array, i, k);
}
}
}

private void swap(char[] a, int x, int y) {
char temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}

熱點內容
將圖片加密 發布:2024-09-25 01:17:19 瀏覽:22
androidtitlebar自定義 發布:2024-09-25 01:11:23 瀏覽:582
安卓手機哪個軟體可以看火山 發布:2024-09-25 01:06:33 瀏覽:800
密碼是什麼呢是好爸爸 發布:2024-09-25 00:42:05 瀏覽:327
如何學編程編程 發布:2024-09-25 00:39:51 瀏覽:121
安卓qq發閃照如何保留 發布:2024-09-25 00:39:51 瀏覽:755
無線網卡能搭建伺服器嘛 發布:2024-09-25 00:24:02 瀏覽:446
明日方舟游戲緩存 發布:2024-09-25 00:09:49 瀏覽:543
資料庫交集 發布:2024-09-25 00:05:38 瀏覽:474
安卓手機怎麼看真正配置 發布:2024-09-25 00:04:43 瀏覽:984