给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = "1312",
输出为:
1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211
Input
输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)
Output
输出S所包含的字符组成的所有排列
Input示例
1312
Output示例
1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121
3211
题解:
package a51modWeb.acm;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class M1384 {
private static Set<Integer> integers = new TreeSet<>();
static int count = 0;
public static void qpl(char []nums,int from,int to) {
if(from==to) {
integers.add(Integer.valueOf(new String(nums)));
return;
}
for (int i = from; i <= to; i++) {
swap(nums, i, from);
qpl(nums, from+1, to);
swap(nums, from, i);
}
}
public static char[] swap(char []nums,int a,int b) {
char t;
t = nums[a];
nums[a] = nums[b];
nums[b] = t;
return nums;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String str = in.next();
qpl(str.toCharArray(), 0, str.length()-1);
Iterator<Integer> iterator = integers.iterator();
StringBuffer str2;
while(iterator.hasNext()) {
str2 = new StringBuffer(String.valueOf(iterator.next()));
while(str2.length()!=str.length()) {
str2.insert(0, '0');
}
System.out.println(str2);
}
}
}