[LeetCode] 384. Shuffle an Array
阿新 • • 發佈:2018-12-13
題目
Shuffle a set of numbers without duplicates.
Example:
// Init an array with set 1, 2, and 3. int[] nums = {1,2,3}; Solution solution = new Solution(nums); // Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned. solution.shuffle(); // Resets the array back to its original configuration [1,2,3]. solution.reset(); // Returns the random shuffling of array [1,2,3]. solution.shuffle();
思路
題目大意
實現一個洗牌類的相關方法。
- 構造方法 將待洗牌的 int []nums傳入。
- 方法reset(),返回 最初的 nums陣列。
- 方法shuffle(),返回 對nums的洗牌結果。
解題思路
類成員變數 生成一份 nums的備份供 方法reset() 使用。 shuffle() 實現是 從nums中選出第1個位置,再從nums中 n個元素(包括自己) 交換,確定第1個位置。然後選出第 2個位置,再從剩下的n-1個元素(包括自己)交換。直到只剩最後一個元素。
code
class Solution {
int[] backup_nums;
int[] nums;
Random rd = new Random();
public Solution(int[] nums) {
this.backup_nums = nums;
this.nums = nums.clone();
}
/** Resets the array to its original configuration and return it. */
public int[] reset() {
return this.backup_nums;
}
/** Returns a random shuffling of the array. */
public int[] shuffle() {
int n = this.nums.length;
while(n>1){
n--;
int k = rd.nextInt(n+1);
int value = this.nums[k];
this.nums[k] = this.nums[n];
this.nums[n] = value;
}
return this.nums;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* int[] param_1 = obj.reset();
* int[] param_2 = obj.shuffle();
*/