-
Notifications
You must be signed in to change notification settings - Fork 4
/
384.Shuffle_an_Array.js
58 lines (54 loc) · 1.37 KB
/
384.Shuffle_an_Array.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* 解法:递归 + 0~n随机索引 + 未取索引stack
* 核心思想:随机索引碰巧在stack中,则删除一个索引;否则递归直到随机数碰巧在stack中。
*/
/**
* @param {number[]} nums
*/
var Solution = function (nums) {
this.length = nums.length;
this.nums = nums;
this.sortArr = (n) => {
var i = 0;
var arr = [];
for (; i < n; i++) {
arr[i] = i;
}
return arr;
};
this.getRandomInt = (max) => {
return Math.floor(Math.random() * Math.floor(max));
};
};
/**
* 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 () {
var result = arguments[0] || [];
var stack = arguments[1] || this.sortArr(this.length);
for (var i = arguments[2] || 0; i < this.length; i++) {
var randomIdx = this.getRandomInt(this.length);
var curIdx = stack.indexOf(randomIdx);
if (curIdx !== -1) {
result.push(this.nums[randomIdx]);
stack.splice(curIdx, 1);
} else {
return this.shuffle(result, stack, i);
}
}
return result;
};
/**
* Your Solution object will be instantiated and called as such:
* var obj = new Solution(nums)
* var param_1 = obj.reset()
* var param_2 = obj.shuffle()
*/