排列是一个物体的有序安排。例如3124是1,2,3,4的一种排列。如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。0,1,2的字典排列有:
012 021 102 120 201 210
0, 1, 2, 3, 4, 5, 6, 7, 8,9的第100万个字典排列是什么?
public class Test {
public static void main(String[] args) {
int MAX = 1000000 - 1;
int[] tempn = new int[9];
int[] num = new int[10];
int[] answer = new int[10];
int NUM = 1;
int n;
num[0] = 0;
for (int i = 1; i < 10; i++) {
NUM *= i;
tempn[i - 1] = NUM;
num[i] = i;
}
for (int i = 8; i >= 0; i--) {
n = MAX / tempn[i];
int k = 0;
int m = 8 - i;
while (n > 0) {
n--;
k++;
while (num[k] == -1)
k++;
}
answer[m] = num[k];
num[k] = -1;
MAX %= tempn[i];
}
for (int i = 0; i < 10; i++) {
if (num[i] != -1) {
answer[9] = num[i];
break;
}
}
for (int a : answer) {
System.out.print(a);
}
}
}
算法引自 http://blog.sina.com.cn/s/blog_9f26be1d01012n0n.html ,本人只是改用JAVA代码实现而已,学习了.