思路
- 打乱数组,全排列,全排列是当前元素和依次其之前的元素进行交换,然后递归(当前元素变换),再换回来
- 返回任何数组的概率相同,那么就是随机交换,当前元素(当前元素变换)和任意一个元素进行交换,只需要一个数组,把一次递归做到底就行
typedef struct {
int *res;
int *ress;
int count;
} Solution;
Solution* solutionCreate(int* nums, int numsSize) {
Solution *obj = (Solution*)malloc(sizeof(Solution));
obj->res = (int *)malloc(sizeof(int)*numsSize);
obj->ress = (int *)malloc(sizeof(int)*numsSize);
int i;
obj->count = numsSize;
for (i = 0; i < numsSize; i++) {
obj->res[i] = nums[i];
obj->ress[i] = nums[i];
}
return obj;
}
int* solutionReset(Solution* obj, int* retSize) {
*retSize = obj->count;
return obj->ress;
}
int* solutionShuffle(Solution* obj, int* retSize) {
int i;
*retSize = obj->count;
for (i = 0; i < obj->count; i++) {
int id = rand()%(obj->count);
int temp = obj->res[i];
obj->res[i] = obj->res[id];
obj->res[id] = temp;
}
return obj->res;
}
void solutionFree(Solution* obj) {
free(obj);
}
/**
* Your Solution struct will be instantiated and called as such:
* Solution* obj = solutionCreate(nums, numsSize);
* int* param_1 = solutionReset(obj, retSize);
* int* param_2 = solutionShuffle(obj, retSize);
* solutionFree(obj);
*/