字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
题目解析
根据题目要求需要的到一个字符串中所有的字符排序
第一步、遍历出所有可能出现在第一个位置的字符(即:依次将第一个字符同后面所有字符交换);
第二步、 固定第一个字符,求后面字符的排列(即:在第1步的遍历过程中,插入递归进行实现);
代码
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
ArrayList<String> res = new ArrayList<>();
public ArrayList<String> Permutation(String str) {
//回溯法
if( str != null && str.length()>0){
PermutationHelper(str.toCharArray(), 0, res);
Collections.sort(res);
}
return res;
}
private void PermutationHelper(char [] cs,int p,ArrayList<String>list){
if(p == cs.length-1){//沿当前这条路径遍历到最后
String path= String.valueOf(cs);
if(!res.contains(path)){
res.add(path);
}
}else{
for(int i = p ; i < cs.length ; i++){//所有的在当前位置后面的数都与当前位置交换,
swip(cs,p,i);//
PermutationHelper(cs,p+1,list);//下一步继续交换
swip(cs,p,i);
}
}
}
public void swip( char [] cs,int i ,int j){
char temp = cs[i];
cs[i] = cs[j];
cs[j]=temp;
}
}