题目
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
思路
先固定第一个字符,后面的逐个进行交换
实现
public class Solution {
public static void main(String[] args) {
String value = "hello";
Solution.permutation(value.toCharArray(), 0);
}
public static void permutation(char[] chars, int pos) {
if (pos == chars.length - 1) {
System.out.println(chars);
}
for (int i = pos; i < chars.length; i++) {
//首部字符和它后面的字符(包括自己)进行交换
char temp = chars[i];
chars[i] = chars[pos];
chars[pos] = temp;
//递归求后面的字符的排列
permutation(chars, pos + 1);
//由于前面交换了一下,我们要还原回来
temp = chars[i];
chars[i] = chars[pos];
chars[pos] = temp;
}
}
}