import java.util.ArrayList;

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),廣陽(yáng)網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:廣陽(yáng)等地區(qū)。廣陽(yáng)做網(wǎng)站價(jià)格咨詢:18982081108
import java.util.List;
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.contList();
t.getAllArray(list, 0);
}
private static ListInteger list = new ArrayList();
private void contList(){
list.add(1);
list.add(2);
list.add(3);
}
public void getAllArray(ListInteger inlist,int site){
int tempsite = site;
if(site = inlist.size()){
return;
}
Integer firstNode = inlist.get(site++);
List tempList = new ArrayList(inlist);
tempList.remove(tempsite);
for(int i = 0;i tempList.size();i++){
System.out.print(firstNode);
for(int j = i;j tempList.size()+i;j++){
if(j tempList.size()){
System.out.print(","+tempList.get(j));
}else{
System.out.print(","+tempList.get(j-tempList.size()));
}
}
System.out.println("");
}
getAllArray(inlist,site);
}
}
n=3這個(gè)運(yùn)行結(jié)果是
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
import java.util.*;
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
String[] array = new String[] { "1", "2", "3", "4" };
int length=array.length;
listAll(Arrays.asList(array), "",length);
}
public static void listAll(List candidate, String prefix,int length) {
if(prefix.length()==length)
System.out.println(prefix);
for (int i = 0; i candidate.size(); i++) {
List temp = new LinkedList(candidate);
listAll(temp, prefix + temp.remove(i),length);
}
}
}
遞歸實(shí)現(xiàn),取數(shù)字(字符串)中第i個(gè)位置的字符,然后將他和剩余的字符拼接,剩余的字符串當(dāng)成有一個(gè)全排列的輸入,這樣遞歸下去,只剩一個(gè)字符時(shí)全排列就是本身。程序中使用set去除了重復(fù)的數(shù)據(jù),如果需要保留,將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:
*
* 輸入一個(gè)數(shù)字,講輸出 1到這個(gè)數(shù)字的全排列
*/
public class MyDemo2 {
private static SetString SET_STRING = new HashSetString();
private static SetLong SET_NUM = new HashSetLong();
public static void main(String[] args) {
System.out.println("begin ...... ");
testLong(234);
testString("a23");
print(SET_NUM);
print(SET_STRING);
System.out.println("end ...... ");
}
/**
* 測(cè)試數(shù)字
* @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]));
}
}
}
/**
* 測(cè)試字符串
* @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("/*****************************************************/");
}
/**
* 遞歸算法 全排列 去除重復(fù)
* @param str
* @return
*/
private static String[] getAllOrder(String str) {
String [] arrResult = null;
SetString set = new HashSetString();
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;
}
}
盡量用遞歸好理解一些,打個(gè)斷點(diǎn)
public class Permutation {
public static void permulation(int[] list, int start, int length) {
int i;
if (start == length) {
for (i = 0; i length; i++)
System.out.print(list[i] + " ");
System.out.println();
} else {
for (i = start; i length; i++) {
swap(list, start, i);
permulation(list, start + 1, length);
swap(list, start, i);
}
}
}
public static void swap(int[] list, int start, int i) {
int temp;
temp = list;
list = list[i];
list[i] = temp;
}
public static void main(String[] args) {
int length = 3;
int start = 0;
int list[] = new int[length];
for (int j = 0; j length; j++)
list[j] = j + 1;
permulation(list, start, length);
}
}
= =~思路什么的...用遞歸吧:
package mon_11;
import java.util.HashSet;
public class ArrangeAll {
private static HashSetString set = new HashSetString();
public static void arrangeAll(String s) {
put(new StringBuilder(s), new StringBuilder());
}
static void put(StringBuilder s1, StringBuilder s2) {
if (s1.length() == 0)set.add(s2.toString());
for (int i = 0; i s1.length(); i++) {
put(new StringBuilder(s1).deleteCharAt(i),new StringBuilder(s2).append(s1.charAt(i)));
}
}
public static void main(String[] args) {
arrangeAll("abcd");
System.out.println(set);
}
}
----
輸出:
[dcab, acdb, acbd, bcda, bdca, bdac, dbca, bacd, cabd, cdba, cdab, badc, dabc, cadb, dbac, bcad, dacb, cbda, cbad, adbc, adcb, abcd, abdc, dcba]
思路:先有一個(gè)起始排列,如1234.從后面掃描,直到找到a[k],a[k]a[k+1];再?gòu)暮竺鎾呙瑁钡秸业絘[j],這里有 a[k]a[j]。交換a[k],a[j].再把a(bǔ)[k+1],...a[n-1]排序(從小到大),即得到了一個(gè)排列,再循環(huán)下去,直到找出所有的排序。用C語(yǔ)言的,參考下:
網(wǎng)頁(yè)標(biāo)題:求全排列java代碼,java排序代碼完整
鏈接地址:http://chinadenli.net/article12/pheodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、ChatGPT、企業(yè)建站、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)