打乱一个没有重复元素的数组。
示例:
// 以数字集合 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();
type Solution struct {
nums []int
}
func Constructor(nums []int) Solution {
return Solution{nums: nums}
}
func (this *Solution) Reset() []int {
return this.nums
}
/** Returns a random shuffling of the array. */
func (this *Solution) Shuffle() []int {
len := len(this.nums)
cur := make([]int, len)
for i := 0; i < len; i++ {
cur[i] = this.nums[i]
}
var (
pos int
temp int
)
for i := len - 1; i >= 0; i-- {
pos = rand.Intn(i + 1)
temp = cur[pos]
cur[pos] = cur[i]
cur[i]=temp
}
return cur
}