62,628
社区成员
发帖
与我相关
我的任务
分享
import java.util.BitSet;
import java.util.Random;
public class Phone {
private final static int MULTI = 100;
private int max;
private int density;
public Phone(int len, int density) {
if(len > 9 || len < 2) {
throw new IllegalArgumentException("len must between 1 and 9");
}
if(density < 1 || density > MULTI) {
throw new IllegalArgumentException("density is invalid");
}
this.max = (int)Math.pow(10, len) - 1;
this.density = density;
}
public int[] generate() {
int multi = (max + 1) / MULTI;
int[] phones = new int[multi * density];
Random ran = new Random();
int offset = 0;
while(multi-- > 0) {
BitSet bit = new BitSet(MULTI);
int count = 0;
while(count < density) {
int low = ran.nextInt(MULTI);
if(!bit.get(low)) {
bit.set(low);
phones[offset++] = multi * MULTI + low;
count++;
}
}
}
disorder(phones);
return phones;
}
private void disorder(int[] nums) {
Random ran = new Random();
for(int i = 0; i < nums.length; i++) {
swap(nums, i, ran.nextInt(nums.length));
// swap(nums, nums.length - i - 1, ran.nextInt(nums.length));
}
}
private void swap(int[] nums, int a, int b) {
int t = nums[a];
nums[a] = nums[b];
nums[b] = t;
}
public int getMax() {
return max;
}
public int getDensity() {
return density;
}
}int[] all = new int[100000000];
int n = all.length;
int[] result = new int[(int)(n*dentity)];
for(int i=0; i<all.length; i++) {
all[i] = i;
}
for(int i=0; i<result.length; i++) {
int j = (int)(Math.random()*n);
result[i] = all[j];
all[j] = all[n];
n--;
}