------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
我的舍友晓杰(C++高手)今天去了一家IT公司笔面试,其中就有这么一道题。
题目大意:输入一个字符串,显示出字符串的所有排列。例如:输入"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