思路:遍历整个数组,从下标0开始,使用random随机得到一个数,这个数作为下标,和下标0对应的数做交换,random取随机数的过程,只能在当前下标的右侧取,可以自己和自己交换。
class Solution {
int[] nums;
int len;
Random random=new Random();
public Solution(int[] nums) {
this.nums=nums;
this.len=nums.length;
}
public int[] reset() {
return nums;
}
public int[] shuffle() {
int[] array=nums.clone();
for(int i=0;i<len;i++){
swap(array,i,i+random.nextInt(len-i));
}
return array;
}
private void swap(int[] nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}