當前位置:首頁 » 操作系統 » 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-11-15 09:40:52 瀏覽:262
安卓系統錄像設置在哪裡 發布:2024-11-15 09:36:33 瀏覽:917
電信級伺服器電腦 發布:2024-11-15 09:26:27 瀏覽:246
壓縮某個文件夾 發布:2024-11-15 09:03:11 瀏覽:891
網址能解壓嗎 發布:2024-11-15 08:54:09 瀏覽:933
python更改目錄 發布:2024-11-15 08:41:08 瀏覽:265
伺服器快閃記憶體可以裝在一般電腦上嗎 發布:2024-11-15 08:36:46 瀏覽:8
安卓手機怎麼查詢自己的路線軌跡 發布:2024-11-15 08:32:19 瀏覽:969
phpdatet 發布:2024-11-15 08:32:17 瀏覽:507
HDB3編解碼實驗 發布:2024-11-15 08:17:31 瀏覽:212