1.问题描述:
一组字符串的全排列,按照全排列的顺序输出,并且每行结尾无空格。
2.输入:
输入一个字符串
3.输入示例:
请输入全排列的字符串:
abc
4.输出示例:
a b c
a c b
b a c
b c a
c b a
c a b
5.解题思路:
全排列问题在算法这类问题中属于典型的递归与回溯类问题。这种题目一定要从整体去思考。通过输入示例,我们可以观察到,a,b,c三个字符,都可以放在第一个位置,都可以放在第二个位置,都可以放在第三个位置...根据这个思路,通过我们数学中的全排列公式,有三个位置□□□,第一个位置可以选3个,第二个位置选2个,第三个位置只能选一个。C(1,3)*C(1,2)*C(1,1) (表示不出来...就是数学里面的组合公式)。如果是求组合的个数,则直接利用这个公式相乘,如果打印排列,则如下进行交换,直接在边界条件打印即可,求代码如下:
import java.util.Scanner;
public class PaiLie {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("请输入全排列的字符串:");
String s= scn.next();
char[] shu = s.toCharArray();
//从第0个位置开始
pailie(shu,0);
}
public static void pailie(char shu[], int k){
if(k==shu.length){
for(int i=0;i<shu.length;i++){
System.out.print(shu[i] + " ");
}
System.out.println();
}
for(int i=k;i<shu.length;i++){
//交换
{char t = shu[k];shu[k] = shu[i];shu[i] = t;}
//递归,下一个数去排列
pailie(shu,k+1);
//交换回来
{char t = shu[k];shu[k] = shu[i];shu[i] = t;}
}
}
}