Skip to content

Commit d236296

Browse files
Merge pull request youngyangyang04#997 from KingArthur0205/remote
添加 0047.全排列II.md C语言版本
2 parents 6de5da7 + 155f457 commit d236296

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

problems/0047.全排列II.md

+71
Original file line numberDiff line numberDiff line change
@@ -323,5 +323,76 @@ func permuteUnique(_ nums: [Int]) -> [[Int]] {
323323
}
324324
```
325325

326+
### C
327+
```c
328+
//临时数组
329+
int *path;
330+
//返回数组
331+
int **ans;
332+
int *used;
333+
int pathTop, ansTop;
334+
335+
//拷贝path到ans中
336+
void copyPath() {
337+
int *tempPath = (int*)malloc(sizeof(int) * pathTop);
338+
int i;
339+
for(i = 0; i < pathTop; ++i) {
340+
tempPath[i] = path[i];
341+
}
342+
ans[ansTop++] = tempPath;
343+
}
344+
345+
void backTracking(int* used, int *nums, int numsSize) {
346+
//若path中元素个数等于numsSize,将path拷贝入ans数组中
347+
if(pathTop == numsSize)
348+
copyPath();
349+
int i;
350+
for(i = 0; i < numsSize; i++) {
351+
//若当前元素已被使用
352+
//或前一位元素与当前元素值相同但并未被使用
353+
//则跳过此分支
354+
if(used[i] || (i != 0 && nums[i] == nums[i-1] && used[i-1] == 0))
355+
continue;
356+
357+
//将当前元素的使用情况设为True
358+
used[i] = 1;
359+
path[pathTop++] = nums[i];
360+
backTracking(used, nums, numsSize);
361+
used[i] = 0;
362+
--pathTop;
363+
}
364+
}
365+
366+
int cmp(void* elem1, void* elem2) {
367+
return *((int*)elem1) - *((int*)elem2);
368+
}
369+
370+
int** permuteUnique(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
371+
//排序数组
372+
qsort(nums, numsSize, sizeof(int), cmp);
373+
//初始化辅助变量
374+
pathTop = ansTop = 0;
375+
path = (int*)malloc(sizeof(int) * numsSize);
376+
ans = (int**)malloc(sizeof(int*) * 1000);
377+
//初始化used辅助数组
378+
used = (int*)malloc(sizeof(int) * numsSize);
379+
int i;
380+
for(i = 0; i < numsSize; i++) {
381+
used[i] = 0;
382+
}
383+
384+
backTracking(used, nums, numsSize);
385+
386+
//设置返回的数组的长度
387+
*returnSize = ansTop;
388+
*returnColumnSizes = (int*)malloc(sizeof(int) * ansTop);
389+
int z;
390+
for(z = 0; z < ansTop; z++) {
391+
(*returnColumnSizes)[z] = numsSize;
392+
}
393+
return ans;
394+
}
395+
```
396+
326397
-----------------------
327398
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
 (0)