字符串的排列
- 题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符’a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。(字符串的全排列:字符串的全部字符所能排列出来的所有字符串)
- 思路:
1.把字符串分为两部分:一部分是字符串的第一个字符,另一部分是第一个字符以后的所有字符。问题转换为先固定第一个字符,求剩余字符的排列;求剩余字符排列时跟原问题一样。
2.固定第一个字符:将第一个位置的数分别与其后面的数交换位置(包括自己)
3.由于是直接对字符数组进行操作,每种情况完成后要将状态归位,不影响下一种情况(回溯)
4.使用Collections.sort()对结果列表进行排序 - 代码
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result = new ArrayList<String>();
if(str!=null&&str.length()>0){
char[] chs = str.toCharArray();
process(result,chs,0);
Collections.sort(result);
}
return result;
}
public void process(ArrayList result,char[] chs,int i){
if(i==chs.length){
String s = String.valueOf(chs);
if(!result.contains(s)){
result.add(s);
}
}
for(int j=i;j<chs.length;j++){
swap(chs,i,j);
process(result,chs,i+1);
swap(chs,i,j);
}
}
public void swap(char[] chs,int i,int j){
char temp = chs[i];
chs[i] = chs[j];
chs[j] = temp;
}
}