打乱一个没有重复元素的数组。
示例:
// 以数字集合 1, 2 和 3 初始化数组。
int[] nums = {1,2,3};
Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
solution.shuffle();// 重设数组到它的初始状态[1,2,3]。
solution.reset();// 随机返回数组[1,2,3]打乱后的结果。
solution.shuffle();
思路:
在对象中保存原数组,调用reset方法时直接返回该原数组。
对于shuffle方法:
需要用到随机数Math.random(),这个随机数是0~1之间的数(不包括1),所以还要乘以数组长度才能表示数组的索引。设置标志数组,表示原数组中的对应元素是否被添加到shuffle数组中。当所有元素都添加完毕时,返回shuffle数组。
/*** @param {number[]} nums*/
var Solution = function(nums) {this.nums = nums;
};/*** Resets the array to its original configuration and return it.* @return {number[]}*/
Solution.prototype.reset = function() {return this.nums
};/*** Returns a random shuffling of the array.* @return {number[]}*/
Solution.prototype.shuffle = function() {let shuffle = [];let len = this.nums.length;let nums = this.nums;let indexArr = Array(len).fill(0); // 标记数组while (shuffle.length < len) {let index = parseInt(Math.random() * len);if (indexArr[index] === 0) {shuffle.push(nums[index])indexArr[index] = 1}}return shuffle;
};/** * Your Solution object will be instantiated and called as such:* var obj = Object.create(Solution).createNew(nums)* var param_1 = obj.reset()* var param_2 = obj.shuffle()*/