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
|
void dfs(int *item,int level, int *nums, int n, int *visited, int ***out, int *returnSize) { if(level == n) { (*returnSize)++; *out = realloc(*out,sizeof(int*)*(*returnSize)); (*out)[*returnSize - 1] = malloc(sizeof(int)*n); memcpy((*out)[*returnSize - 1], item , sizeof(int)*n); return; } for(int i = 0; i < n; i++) { if(visited[i] == 0) { visited[i] = 1; item[level] = nums[i]; dfs(item, level + 1, nums, n, visited, out, returnSize); visited[i] = 0; item[level] = 0; } } }
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) { if(!nums) return NULL; int *visited = malloc(sizeof(int)*numsSize); int *item = malloc(sizeof(int)*numsSize); int **result = malloc(sizeof(int*)); memset(visited, 0, sizeof(int)*numsSize); memset(item, 0, sizeof(int)*numsSize); *returnSize = 0; dfs(item, 0, nums, numsSize, visited, &result, returnSize); int *col = malloc(sizeof(int)*(*returnSize)); for(int i=0; i < (*returnSize); i++) col[i] = numsSize; *returnColumnSizes = col; return result; }
|