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();
Below solution didn't pass AC but I believe the code works. I'm not sure how LC verifies whether it's random.
1 public class Solution { 2 3 private int[] copy = null; 4 private Random random = new Random(); 5 6 public Solution(int[] nums) { 7 copy = nums; 8 } 9 10 /** Resets the array to its original configuration and return it. */ 11 public int[] Reset() { 12 return copy; 13 } 14 15 /** Returns a random shuffling of the array. */ 16 public int[] Shuffle() { 17 var nums = new int[copy.Length]; 18 var result = new int[copy.Length]; 19 Array.Copy(copy, nums, copy.Length);; 20 21 for (int i = 0; i < copy.Length; i++) 22 { 23 var ran = random.Next(i, copy.Length); 24 25 result[i] = nums[ran]; 26 27 // to avoid the element at ran to be chosen again 28 nums[ran] = nums[i]; 29 } 30 31 return result; 32 } 33 } 34 35 /** 36 * Your Solution object will be instantiated and called as such: 37 * Solution obj = new Solution(nums); 38 * int[] param_1 = obj.Reset(); 39 * int[] param_2 = obj.Shuffle(); 40 */