输入:abc
输出:abc acb bac bca cab cba
思路:
字符串由两部分组成,第一个字符和后面的部分
1。先求所有可能出现在第一个位置的字符,
2。固定第一个字符,求后面字符的排列,递归
public class Permutation {
// 剑指offer第28题,字符串的排列
public void permutation(char[] ch){
if(ch == null || ch.length == 0){
return;
}
permutationString(ch,0);
}
private void permutationString(char[] ch,int index) {
int end = ch.length - 1;
if(index == end){
System.out.println(new String(ch));
}else {
for(int i = index; i <= end; i ++){
char temp = ch[index];
ch[index] = ch[i];
ch[i] = temp;
permutationString(ch,index+1);
//恢复前面的变化
temp = ch[index];
ch[index] = ch[i];
ch[i] = temp;
}
}
}
public static void main(String[] args){
char[] example = {'a','b','c','d'};
new Permutation().permutation(example);
}
}
本文介绍了一个用于求解字符串排列问题的递归算法。通过固定字符串中的首个字符,并递归地生成剩余字符的所有可能排列组合来实现。文章给出了完整的Java代码示例,并详细解释了算法的执行过程。
1973

被折叠的 条评论
为什么被折叠?



