我有一系列数字,比如说它是
[1, 3, 5, 7, 9]
可以生成5个!这是这些数字的120个独特序列。例如
1 3 5 7 9
5 1 3 9 7
7 3 9 5 1
1 7 9 5 3
... and so forth
我需要随机生成10个这样的序列,没有重复。任何建议都会非常感激。
答案 0 :(得分:4)
List<Integer> template = Arrays.asList(1, 3, 5, 7, 9);
Set<List<Integer>> seen = new HashSet<List<Integer>>();
for (int i = 0; i < 10; ++i) {
List<Integer> items = new ArrayList<Integer>(template);
do {
Collections.shuffle(items);
} while (!seen.add(items));
System.out.println(items);
}
: - )
答案 1 :(得分:3)
你想要的是生成给定数组的n个随机排列。 存在一种用于生成一个随机置换的简单算法,这在wikipedia上得到了很好的解释。但是你仍然需要检查它的唯一性。
在Java中:
Random rand = new Random();
int[] generateRandomPermutation(int n) {
int[] res = new int[n];
for (int i = 0; i < n; i++) {
int d = rand.nextInt(i+1);
res[i] = res[d];
res[d] = i;
}
return res;
}
另一种解决方案是使用置换编号方案(呈现here),并生成n个随机不同整数的对应置换(从0到s!-1,其中s是数组的大小)。
答案 2 :(得分:0)
您可以查看this StackOverflow thread,特别是关于在java.util.Collections中使用shuffle功能的帖子。