Skip to content

Commit f0fb65b

Browse files
Merge pull request youngyangyang04#804 from KingArthur0205/remote
添加0046.全排列.md C语言版本
2 parents d5e6aa8 + 29b5373 commit f0fb65b

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

problems/0046.全排列.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,72 @@ var permute = function(nums) {
309309

310310
```
311311

312+
C:
313+
```c
314+
int* path;
315+
int pathTop;
316+
int** ans;
317+
int ansTop;
318+
319+
//将used中元素都设置为0
320+
void initialize(int* used, int usedLength) {
321+
int i;
322+
for(i = 0; i < usedLength; i++) {
323+
used[i] = 0;
324+
}
325+
}
326+
327+
//将path中元素拷贝到ans中
328+
void copy() {
329+
int* tempPath = (int*)malloc(sizeof(int) * pathTop);
330+
int i;
331+
for(i = 0; i < pathTop; i++) {
332+
tempPath[i] = path[i];
333+
}
334+
ans[ansTop++] = tempPath;
335+
}
336+
337+
void backTracking(int* nums, int numsSize, int* used) {
338+
//若path中元素个数等于nums元素个数,将nums放入ans中
339+
if(pathTop == numsSize) {
340+
copy();
341+
return;
342+
}
343+
int i;
344+
for(i = 0; i < numsSize; i++) {
345+
//若当前下标中元素已使用过,则跳过当前元素
346+
if(used[i])
347+
continue;
348+
used[i] = 1;
349+
path[pathTop++] = nums[i];
350+
backTracking(nums, numsSize, used);
351+
//回溯
352+
pathTop--;
353+
used[i] = 0;
354+
}
355+
}
356+
357+
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
358+
//初始化辅助变量
359+
path = (int*)malloc(sizeof(int) * numsSize);
360+
ans = (int**)malloc(sizeof(int*) * 1000);
361+
int* used = (int*)malloc(sizeof(int) * numsSize);
362+
//将used数组中元素都置0
363+
initialize(used, numsSize);
364+
ansTop = pathTop = 0;
365+
366+
backTracking(nums, numsSize, used);
367+
368+
//设置path和ans数组的长度
369+
*returnSize = ansTop;
370+
*returnColumnSizes = (int*)malloc(sizeof(int) * ansTop);
371+
int i;
372+
for(i = 0; i < ansTop; i++) {
373+
(*returnColumnSizes)[i] = numsSize;
374+
}
375+
return ans;
376+
}
377+
```
312378
313379
314380
-----------------------

0 commit comments

Comments
 (0)