最近需要一个排列和随机的需求,就自己写了一个简单的。在这里备份下:
CONTENTS
排列:
static long idx = 1; public static void printArrange(String arr[], Set<Integer> skip, String before) { for (int i = 0; i < arr.length; i++) { if (skip.contains(i)) { continue; } skip.add(i); printArrange(arr, skip, before + arr[i] + "->"); skip.remove(i); } if (skip.size() == arr.length) { System.out.print("" + idx++ +"\t\t\t"); System.out.println(before); } }
调用方式:
String arr2[] = new String[]{"A","B","C","D"}; printArrange(arr, new HashSet<Integer>(), "");
随机数:
public static void printRandom(String arr[], int times) { Random random = new Random(); int size = arr.length; //包含之前已经打印过的序列。 Set<String> before = new HashSet<String>(); for (int j = 0; j < times; j++) { int idx = 0; Set<Integer> skip = new HashSet<Integer>(); //当前序列的key值,用来检测是否已经打印过。 StringBuilder sb = new StringBuilder(); //需要打印的序列 StringBuilder str = new StringBuilder(); for (int i = 0; i < size; i++) { do { idx = random.nextInt(size); } while (skip.contains(idx)); skip.add(idx); sb.append(idx); str.append(arr[idx] + "->"); } if (!before.contains(sb.toString())) { System.out.println(str.toString()); before.add(sb.toString()); } } }
调用方式:
String arr[] = new String[]{"A","B","C","D"}; printRandom(arr, 100);
备注:
1)代码的实现写得比较简单,只是一个简单的思路,后续可以根据特定需求进行修改。
发表评论