@@ -309,6 +309,72 @@ var permute = function(nums) {
309
309
310
310
```
311
311
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
+ ```
312
378
313
379
314
380
-----------------------
0 commit comments