題目大意:輸入一個字符串,顯示出字符串的所有排列。例如:輸入"abc",就得輸出"abc"、"acb"、"bac"、"bca"、"cab"、"cba" 所有可能的序列。
頗有意義的一道題,我決定用Java語言來寫一寫。代碼如下:
import java.util.Arrays;
public class CharList {
//遍歷所有可能的排列結果
public static void traversal(char[] chss, int index){
//for循環,從index位置開始向前(向右), index位置的數與i位置的數互換
for(int i = index; i < chss.length; i ++) {
char[] chs = Arrays.copyOf(chss, chss.length); //Copy出新數組(為了修改其值時互不影響)
char temp = chs[index];
chs[index] = chs[i];
chs[i] = temp;
if(index == chs.length-1) { //到了字符串末, 輸出結果
System.out.println(new String(chs));
break; //跟出此次循環, 此traversal方法執行完畢,跳回上一級循環(在上一個方法體中)
}
traversal(chs, index+1); //遞歸
}
}
//Test
public static void main(String[] args) {
String str = "abcd";
char[] chs = str.toCharArray(); //轉成字符數組
traversal(chs, 0);
}
}
public class CharList {
//遍歷所有可能的排列結果
public static void traversal(char[] chss, int index){
//for循環,從index位置開始向前(向右), index位置的數與i位置的數互換
for(int i = index; i < chss.length; i ++) {
char[] chs = Arrays.copyOf(chss, chss.length); //Copy出新數組(為了修改其值時互不影響)
char temp = chs[index];
chs[index] = chs[i];
chs[i] = temp;
if(index == chs.length-1) { //到了字符串末, 輸出結果
System.out.println(new String(chs));
break; //跟出此次循環, 此traversal方法執行完畢,跳回上一級循環(在上一個方法體中)
}
traversal(chs, index+1); //遞歸
}
}
//Test
public static void main(String[] args) {
String str = "abcd";
char[] chs = str.toCharArray(); //轉成字符數組
traversal(chs, 0);
}
}
程序執行,輸出結果為:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
本文原創,轉載請注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢帆影JavaEE技術博客)