题目描述
输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
解题思路
把字符串分为两部分,一部分是字符串的第一个字符,另一部分是剩下的所有字符,接下来求剩余所有字符串的排列;拿第一个字符与后面字符组个交换。
Java代码实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 给定一个字符链表,打印其所有可能的排列(注意不是组合)
* @author Administrator
*
*/
public class Exe40_GetAllRankedDatas {
public static void main(String[] args) {
List<Character> ls=new ArrayList<Character>();
ls.add('A');
ls.add('B');
ls.add('C');
solution(ls, 0);
}
public static void solution(List<Character> ls,int n) {
if(ls==null||ls.size()==0) return;
else {
if(n==ls.size()){
System.out.println(ls.toString());
}else {
for(int i=n;i<ls.size();i++){
Collections.swap(ls, i, n);
solution(ls, n+1);
Collections.swap(ls, i, n);
}
}
}
}
}