剑指offer(27)字符串的排列
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.length()!= 0 && str.length() > 0){
Helper(str.toCharArray(),0,result);
Collections.sort(result);//将所有排列组合的可能按照字典序排列出来
}
return result;
}
public void Helper(char[] ch,int i ,ArrayList list){
if(i == ch.length-1){
String val = String.valueOf(ch);
if(!list.contains(val)){
list.add(val);//去重,将所有的排列放到list中
}
}else{
for(int j = i;j < ch.length;j++){//
swap(ch,i,j);//固定第一位
Helper(ch,i+1,list);//将除了定位过的元素进行排列
swap(ch,i,j);//复原,回溯,重新选择第一位
}
}
}
public void swap(char[] ch,int i ,int j){//交换方法
char c = ch[i];
ch[i] = ch[j];
ch[j] = c;
}
}