输入一个字符串,打印这个字符串中字符的全排列。
eg:
输入:abc
输出:abc acb bac bca cab cba
思路:将求字符串的全排列分解为两步:
第一步是确定第一个位置的字符,就是第一个位置与后边的所有字符进行交换。
第二步,就是对除了第一个位置的后边所有位置的字符进行相同处理;直至剩下一个字符,打印;
看成两部分:
交换后只关注后边的;
实现代码:
import java.util.Scanner;
public class demo1 {
//以chars数组的n号位置作为交换点,向后交换
public static void paiLie(int n,char[] chars){
//递归出口:只剩一个字符,即无法交换
if (n==chars.length-1){
System.out.println(String.valueOf(chars));
}
else
{
char exchange;
for (int i = n;i<chars.length;i++){
//依次交换n与它后边的每一个字符
exchange = chars[i];
chars[i] = chars[n];
chars[n] = exchange;
//对后边的字符递归调用
paiLie(n+1,chars);
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()){
String string = in.nextLine();
char[] chars = string.toCharArray();
paiLie(0,chars);
}
}
}
拓展:
按照一定要求摆放若干个数字;
先求出所有的全排列,一一判断是否符合题目给定的要求;