TItle:
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
solution:
void recursive(int** result,int* nums, int numsSize, int* returnSize,bool* used,int* temp, int size)
{
int i=0;
if (size==numsSize) {
result[*returnSize]=(int*)malloc(sizeof(int)*numsSize);
for (i=0;i<numsSize;i++) {
result[*returnSize][i]=temp[i];
}
size=0;
(*returnSize)++;
return;
}
for (i=0;i<numsSize;i++) {
if (!used[i]) {
used[i]=true;
temp[size]=nums[i];
recursive(result,nums,numsSize,returnSize,used,temp,size+1);
used[i]=false;
}
}
}
int** permute(int* nums, int numsSize, int* returnSize) {
int** result = (int**)malloc(sizeof(int)*1000000);
bool* used[numsSize];
int* temp[numsSize];
int size=0;
if (numsSize==0 || nums==NULL) {
*returnSize=0;
return result;
}
*returnSize=0;
memset(used,(bool)false,numsSize);
recursive(result,nums,numsSize,returnSize,used,temp,size);
return result;
}