问题:给出一个字符串,输出所有可能的排列。
1、字典序法:
如何计算字符串的下一个排列了?来考虑""这个字符串java全排列算法-Java全排列算法,我们从后向前找第一双相邻的递增数字,"20"、"52"都是非递增的,"26 "即满足要求,称前一个数字2为替换数,替换数的下标称为替换点,再从后面找一个比替换数大的最小数(这个数必然存在)java全排列算法,0、2都不行,5可以,将5和2交换得到"",然后再将替换点后的字符串"6220"颠倒即得到""。
算法概括:从后向前遍历,找出第一个交换点,再按照规则找出第二个交换点,将两者进行交换,对第一个交换点之后的字符进行颠倒操作
<p><pre class="has">package algorithm;
import java.util.Arrays;
public class DictionaryPermutation {
private char[] data;
private int length;
public void permutate(String input) {
// change the data type to we needed
changeToData(input);
// sort the data from small to big
Arrays.sort(data);
// output all the order
System.out.println(data);
while (nextPermutate()) {
System.out.println(data);
}
}
private void changeToData(String input) {
if (input == null)
return;
data = input.toCharArray();
length = data.length;
}
private boolean nextPermutate() {
int end = length - 1;
int swapPoint1 = end, swapPoint2 = end;
// the actual swap-point is swapPoint1 - 1
while (swapPoint1 > 0 && data[swapPoint1] 0 && data[swapPoint2]