字符串的全排列
当输入a,b,c三个字符串的时候,请输出它的全部排列情况.
思路:当我们进行一个问题的解决的时候,尝试把问题分解成小问题,把一个字符串分成一个字符和n-1个字符,然后交换第一个字符和n-1个字符中的全部,然后继续固定第二个字符,继续排列n-2个字符串,这样不断继续下去,就是全排列。
思路:`List res = new ArrayList<>();
public List<String> Permutation(String str){
if(str==null){
return res;
}
Permutation(str.toCharArray(),0);
Collections.sort(res);
return res;
}
//i代表每次的数据规模改变
//str好让替换
public void Permutation(char[] str,int i){
//递归函数怎么处理,递归终点
if(i==str.length-1){
//满足就加一次
res.add(String.valueOf(str));
}else{
//第一次进来的时候,算是将第一个和后面所有的进行交换,for循环,为啥要交换回来呢,因为for循环的第二次的第一个位置要换掉.
//递归体
for(int j=i;j<str.length;j++){
if(j!=i&&str[i]==str[j])
continue;
swap(str,i,j);
Permutation(str,i+1);
//为啥2次交换
swap(str,i,j); //换回来
}
}
}
public void swap(char[] str,int i,int j){
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
`