1 class Solution { 2 private: 3 vector<int> vi; 4 5 public: 6 Solution(vector<int>& nums) { 7 vi = nums; 8 } 9 10 /** Resets the array to its original configuration and return it. */ 11 vector<int> reset() { 12 return vi; 13 } 14 15 int randnum(int left, int right){ 16 //srand(int(time(0))); 17 int k = rand()%(right-left); 18 return k + left; 19 } 20 21 /** Returns a random shuffling of the array. */ 22 vector<int> shuffle() { 23 vector<int> cur=vi; 24 int sz = cur.size(); 25 for(int i=0;i<sz;i++) 26 swap(cur[i], cur[randnum(i, sz)]); 27 28 return cur; 29 } 30 }; 31 32 /** 33 * Your Solution object will be instantiated and called as such: 34 * Solution* obj = new Solution(nums); 35 * vector<int> param_1 = obj->reset(); 36 * vector<int> param_2 = obj->shuffle(); 37 */
从第一个数开始遍历,假设数组长度为n,下标为0~n-1
遍历到下标为i的数时,随机生成一个[i,n-1]的数字s,交换num[i]和num[s]
遍历完成,即生成了一个随机序列。