给定一个数字n和k,表示求一个由n个数字组成的序列的第k个字典序排列。比如给定n=3,k = 2则求由数字【1,2,3】组成的所有序列中的安字典序排列的第k个。不难看出这三个数字组成的序列的按字典序排序如下:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
所以得到的第k=2个序列就是1,3,2。
分析
:
- 可以用上一篇文章所说的NextPermutation方法在初始序列为【1,2,3,···n】的基础上调用k-1次nextPermutation方法即可。
- 可以利用康托编码来实现。
对于一个集合{1,2,3,4,...,n}的从小到大排序(或者从大到小,与从小到大类似,这里只说前者)的全排列显然它有n!项用自然数1,2,...,n!与之一一对应,这是一种对应法则,康托编码就是这么一种可以实现按字典序排序的序列与自然数之间相互对应的双射。
编码规则为&