P********l 发帖数: 452 | 1 你的想法是对的。但是实现起来还是优点麻烦。
如果一个数组的长度是n,那末,一共有n!种排列. 每种都可以写成基数{n, n-1, ..
., 2, 1, 0}的格式。比如,第一个到第三个是{0,0...,1,0},{0,0...1,0,0},{0,0..
.2,1,0}.
这个序列的含义是左边有多少个数比当前的数大。
比如,给定一个排列 {3,2,1,4}, 那末对应的序列是{2,1,0,0}.
根据这种方法,对于一个随机数,可以在o(n)内产生对应的排列。
代码:
完整的代码在:
http://code.google.com/p/sureinterview/source/browse/src/lib/combination/PermutationImpl.java
看看有问题没?
@Override
public T[] get(Long index) {
// adjust to 1-based.
index++;
// parse the index to {n-1, n-2, ... 3, 2, 1, 0}-bas... 阅读全帖 |
|