/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @param numLen int num数组长度 * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return int** returnColumnSizes 返回数组列数 */ #include <stdio.h> #include <stdlib.h> void backsearch(int *num, int numLen, int *count, int **totalSeq, int* state, _Bool* visited, int stateLen) { if(stateLen == numLen) { totalSeq[*count] = (int*)malloc(numLen * sizeof(int)); for(int i = 0; i < numLen; i++) { totalSeq[*count][i] = state[i]; printf("%d ", state[i]); } printf("\n"); *count += 1; return; } _Bool duplicated[7] = {0}; for(int i = 0; i < numLen; i++) { if(!visited[i] && !duplicated[num[i] + 1]) { state[stateLen] = num[i]; visited[i] = 1; duplicated[num[i] + 1] = 1; backsearch(num, numLen, count, totalSeq, state, visited, stateLen + 1); visited[i] = 0; } } } int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b; } int** permuteUnique(int* num, int numLen, int* returnSize, int** returnColumnSizes ) { // write code here int** totalSeq = (int**)malloc(sizeof(int*) * 1000); *returnSize = 0; _Bool *visited = calloc(numLen, sizeof(_Bool)); int* state = (int*)malloc(sizeof(int) * numLen); int stateLen = 0; qsort(num, numLen, sizeof(int), cmp); printf("DONE"); backsearch(num, numLen, returnSize, totalSeq, state, visited, stateLen); *returnColumnSizes = (int*)malloc((*returnSize) * sizeof(int)); for(int i = 0; i < *returnSize; i++) { (*returnColumnSizes)[i] = numLen; } free(visited); free(state); return totalSeq; }