2-9 排列的字典序问题
问题描述
n个元素{1,2,…,n}有n!个不同的排列。将这n!个排列按字典序排列并编号为0,1,…,n!-1。每个排列的编号为其字典序值。例如,当n=3时,6个不同排列的字典序值如下:
字典序值 | 0 | 1 | 2 | 3 | 4 | 5 |
排列 | 123 | 132 | 213 | 231 | 312 | 321 |
给定n,以及n个元素{1,2,…,n}的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。
全排列
Java: version-1
import java.util.*;
public class Main {
private static int n;
private static String inputStr;
private static char[] strToChar = new char[1000];
private static String tmpPerm;
private static Set<String> permSet = new HashSet<>();
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(true){
permSet.clear();
System.out.println("Please input the length of string: ");
n = input.nextInt();
System.out.println("Please input a digit string: ");
inputStr = input.next();
System.out.println("-------------------------");
strToChar = inputStr.toCharArray();
permutate(strToChar, 0, n-1);
int i=0;
int size = permSet.size();
String[] numbers = new String[size];
Iterator<String> iterator = permSet.iterator();
while (iterator.hasNext()){
String value = iterator.next();
numbers[i++] = value;
}
Arrays.sort(numbers);
for(i=0; i<size; i++){
if(numbers[i].equals(inputStr)) {
System.out.println(