1.3字符串的全排列
输入一个字符串,打印出该字符串中字符的所有排列。从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列。如此递归处理,从而得到所有字符的全排列。以对字符串"abc"进行全排列为例,
可以按下述步骤执行。
例如:输入字符串"abc",则输出由字符'a'、'b'、'c'所能排列出来的所有字符。"abc"、"acb"、"bac"、"bca"、"cab"和"cba"。
- 将a固定在第一位,求后面bc的排列,得到:"abc"和"acb"。
- 将b固定在第一位,求后面ac的排列,得到:"bac"和"bca"。
- 将c固定在第一位,求后面ba的排列,得到:"cba"和"cab"。
package com.programming.test;
/**
*
* @ClassName: Test03_1.java
* @Description:字符串的全排列:递归实现
* @author: Henray
* @version:
* @Date: 2018年12月17日
*
*/
public class Test03_1 {
public static void main(String[] args) {
String str = "abc";
Permutation(str, 0, 2);
}
public static void Permutation(String string, int start, int end) {
char[] ch = string.toCharArray();
if (start == end) {
for (int i = 0; i <= end; i++) {
System.out.print(ch[i]);
}
System.out.println();
} else {
for (int i = start; i <= end; i++) {
swap(ch, i, start);
Permutation(String.valueOf(ch), start + 1, end);
swap(ch, i, start);
}
}
}
public static void swap(char[] ch, int a, int b) {
char temp = ch[a];
ch[a] = ch[b];
ch[b] = temp;
}
}