欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java編寫全排列代碼 全排列java實(shí)現(xiàn)

JAVA 全排列算法

遞歸實(shí)現(xiàn),取數(shù)字(字符串)中第i個(gè)位置的字符,然后將他和剩余的字符拼接,剩余的字符串當(dāng)成有一個(gè)全排列的輸入,這樣遞歸下去,只剩一個(gè)字符時(shí)全排列就是本身。程序中使用set去除了重復(fù)的數(shù)據(jù),如果需要保留,將set換為list接口即可。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鄱陽(yáng)免費(fèi)建站歡迎大家使用!

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;

}

}

java怎么搞全排列

盡量用遞歸好理解一些,打個(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);

}

}

java 全排列算法;

= =~思路什么的...用遞歸吧:

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]

Java編程技巧:列表排序代碼分析

在Java Collection Framework中定義的List實(shí)現(xiàn)有Vector ArrayList和LinkedList 這些集合提供了對(duì)對(duì)象組的索引訪問(wèn) 他們提供了元素的添加與刪除支持 然而 它們并沒有內(nèi)置的元素排序支持 你能夠使用java util Collections類中的sort()方法對(duì)List元素進(jìn)行排序 你既可以給方法傳遞一個(gè)List對(duì)象 也可以傳遞一個(gè)List和一個(gè)Comparator 如果列表中的元素全都是相同類型的類 并且這個(gè)類實(shí)現(xiàn)了Comparable接口 你可以簡(jiǎn)單的調(diào)用Collections sort() 如果這個(gè)類沒有實(shí)現(xiàn)Comparator 你也可以傳遞一個(gè)Comparator到方法sort()中 進(jìn)行排序 如果你不想使用缺省的分類順序進(jìn)行排序 你同樣可以傳遞一個(gè)Comparator到方法sort()中來(lái)進(jìn)行排序 如果列表中的元素并不都是相同類型的類 你在進(jìn)行排序的時(shí)候就不是這樣幸運(yùn)了 除非你編寫一個(gè)專用的跨類的Comparator 排序的順序怎么樣呢?如果元素是String對(duì)象 卻省的排序順序是按照字符編碼進(jìn)行的 基本上是每個(gè)字符的ASCII/Unicode值 如果嚴(yán)格的限制在處理英文 卻省的排序順序通常是足夠的 因?yàn)樗紫扰臕 Z 然后是小寫字母a z 然而如果你處理非英文字 或者你只是想使用不同的排序順序 這樣Collections sort()就出現(xiàn)了第二種變化 例如 你想使用字符串的反序進(jìn)行排序 為了實(shí)現(xiàn)這個(gè)功能 你可以在Collections類中通過(guò)reverseOrder()來(lái)獲取一個(gè)反序Comparator 然后 你將反序Comparator傳遞給sort()方法 換句話說(shuō) 你作如下工作 List list = ;Comparator p = Collections reverseOrder();Collections sort(list p); 如果列表包含項(xiàng)目 Man man Woman 和woman 排序好的列表將是Man Woman man woman 這里沒有什么復(fù)雜的 需要注意的非常重要的一點(diǎn)是Collections sort()是進(jìn)行原位排序 如果你需要保留原序 需要先對(duì)原集合進(jìn)行復(fù)制 在排序 就像這樣 List list = ;List copyOfList = new ArrayList(list);Collections sort(copyOfList); 這里 排好序的列表是 Man Woman man woman 但是原始列表(Man man Woman woman)被保留了 到目前為止 排序是區(qū)分大小寫的 你如何進(jìn)行不去分大小寫的排序呢?一種實(shí)現(xiàn)方式是象這樣實(shí)現(xiàn)Comparator: public static class CaseInsensitiveComparator implements Comparator {public int pare(Object element Object element ) {String lower = element toString() toLowerCase();String lower = element toString() toLowerCase();return pareTo(lower );}} 你確實(shí)不需要手工的創(chuàng)建這個(gè)類 而是 你可以是用以存在的Comparator CASE_INSENSIVTIVE_ORDER 它是在String類中定義的 這種實(shí)現(xiàn)方式有一點(diǎn)小小的問(wèn)題 Sort()算法提供穩(wěn)定的排序 并保持與原有序列相同的元素 這意味著一個(gè)包含兩個(gè)元素 woman 和 Woman 的列表將有不同的排序 而這種不同是根據(jù)兩個(gè)元素在列表中出現(xiàn)的先后次序決定的 語(yǔ)言的不同又會(huì)怎么樣呢?java text包提供了Collector和CollectionKey類來(lái)進(jìn)行區(qū)分語(yǔ)言的排序 這里是例子:注意 如果你的文本是本地語(yǔ)言 而不是缺省語(yǔ)言 你需要傳遞一個(gè)本地語(yǔ)種給getInstance()方法 就象: public static class CollatorComparator implements Comparator {Collator collator = Collator getInstance();public int pare(Object element Object element ) {CollationKey key = collator getCollationKey(element toString());CollationKey key = collator getCollationKey(element toString());return pareTo(key );}} 你是在對(duì)集合關(guān)鍵字進(jìn)行排序 而不是實(shí)際的字符串 這不僅提供固定的不區(qū)分大小寫的排序 而且它是跨語(yǔ)種的排序 換句話說(shuō) 如果你對(duì)西班牙文和非西班牙文的混合詞進(jìn)行排序 詞ma?ana (tomorrow)將排在mantra的前面 如果你不使用Collector ma?ana將排在mantra的后面 下面這個(gè)程序?qū)σ粋€(gè)列表進(jìn)行不同類型的排序(缺省的 區(qū)分大小寫的 區(qū)分語(yǔ)種的) import java awt BorderLayout;import java awt Container;import java io *;import java text *;import java util *;import javax swing *;public class SortIt {public static class CollatorComparator implements Comparator {Collator collator = Collator getInstance();public int pare(Object element Object element ) {CollationKey key = collator getCollationKey(element toString());CollationKey key = collator getCollationKey(element toString());return pareTo(key );}}public static class CaseInsensitiveComparator implements Comparator {public int pare(Object element Object element ) {String lower = element toString() toLowerCase();String lower = element toString() toLowerCase();return pareTo(lower );}}public static void main(String args[]) {String words[] = { man Man Woman woman Manana manana ma?ana Ma?ana Mantra mantra mantel Mantel };// Create frame to display sortingsJFrame frame = new JFrame( Sorting );frame setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);Container contentPane = frame getContentPane();JTextArea textArea = new JTextArea();JScrollPane pane = new JScrollPane(textArea);contentPane add(pane BorderLayout CENTER);// Create buffer for outputStringWriter buffer = new StringWriter();PrintWriter out = new PrintWriter(buffer);// Create initial list to sortList list = new ArrayList(Arrays asList(words));out println( Original list: );out println(list);out println();// Perform default sortCollections sort(list);out println( Default sorting: );out println(list);out println();// Reset list list = new ArrayList(Arrays asList(words));// Perform case insensitive sortComparator p = new CaseInsensitiveComparator();Collections sort(list p);out println( Case insensitive sorting: );out println(list);out println();// Reset listlist = new ArrayList(Arrays asList(words));// Perform collation sortp = new CollatorComparator();Collections sort(list p);out println( Collator sorting: );out println(list);out println();// Fill text area and displaytextArea setText(buffer toString());frame pack();frame show();}} 如果你的主要問(wèn)題是順序訪問(wèn) 可能列表不是你的好的數(shù)據(jù)結(jié)構(gòu)選擇 只要你的集合沒有重復(fù) 你可以在樹(TreeSet)中保存你的元素(提供或不提供Comparator) 這樣 元素將總是排序形式的 lishixinzhi/Article/program/Java/hx/201311/26066

Java 缺項(xiàng)全排列算法怎么寫? 新人求教!~

public static void main(String[] args) {

System.out.println(KeyEvent.VK_UP);

String a = "1234";

char[] arry = a.toCharArray();

for (int i = 0; i arry.length; i++) {

System.out.println(arry[i]);

}

for (int i = 0; i arry.length; i++) {

for (int j = i + 1; j arry.length; j++) {

System.out.println(arry[i] + "" + arry[j]);

}

}

for (int i = 0; i arry.length; i++) {

for (int j = i + 1; j arry.length; j++) {

for (int z = j + 1; z arry.length; z++) {

System.out.println(arry[i] + "" + arry[j] + "" + arry[z]);

}

}

}

}

java中,用遞歸方法求n個(gè)數(shù)的無(wú)重復(fù)全排列,n=3。

程序如下所示,輸入格式為:

5

3?1?2?1?2

第一行是數(shù)字個(gè)數(shù),第二行有n個(gè)數(shù),表示待排列的數(shù),輸入假設(shè)待排序的數(shù)均為非負(fù)數(shù)。

import?java.io.File;

import?java.io.FileNotFoundException;

import?java.util.Arrays;

import?java.util.Scanner;

public?class?Main?{

static?final?int?maxn?=?1000;

int?n;????????????//?數(shù)組元素個(gè)數(shù)

int[]?a;????????//?數(shù)組

boolean[]?used;????//?遞歸過(guò)程中用到的輔助變量,used[i]表示第i個(gè)元素是否已使用

int[]?cur;????????//?保存當(dāng)前的排列數(shù)

//?遞歸打印無(wú)重復(fù)全排列,當(dāng)前打印到第idx位

void?print_comb(int?idx)?{

if(idx?==?n)?{????//?idx?==?n時(shí),表示可以將cur輸出

for(int?i?=?0;?i??n;?++i)?{

if(i??0)?System.out.print("?");

System.out.print(cur[i]);

}

System.out.println();

}

int?last?=?-1;????????????????????????????//?因?yàn)橐鬅o(wú)重復(fù),所以last表示上一次搜索的值

for(int?i?=?0;?i??n;?++i)?{

if(used[i])?continue;

if(last?==?-1?||?a[i]?!=?last)?{????//?不重復(fù)且未使用才遞歸下去

last?=?a[i];

cur[idx]?=?a[i];

//?回溯法

used[i]?=?true;

print_comb(idx?+?1);

used[i]?=?false;

}

}

}

public?void?go()?throws?FileNotFoundException

{

Scanner?in?=?new?Scanner(new?File("data.in"));

//?讀取數(shù)據(jù)并排序

n?=?in.nextInt();

a?=?new?int[n];

for(int?i?=?0;?i??n;?++i)?a[i]?=?in.nextInt();

Arrays.sort(a);

//?初始化輔助變量并開始無(wú)重復(fù)全排列

cur?=?new?int[n];

used?=?new?boolean[n];

for(int?i?=?0;?i??n;?++i)?used[i]?=?false;

print_comb(0);

in.close();

}

public?static?void?main(String[]?args)?throws?FileNotFoundException{

new?Main().go();

}

}

客觀來(lái)說(shuō),非遞歸的無(wú)重復(fù)全排列比較簡(jiǎn)單且高效。

標(biāo)題名稱:java編寫全排列代碼 全排列java實(shí)現(xiàn)
本文路徑:http://chinadenli.net/article46/hgcehg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、搜索引擎優(yōu)化網(wǎng)站建設(shè)、域名注冊(cè)、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(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)

成都網(wǎng)站建設(shè)