Leetcode c语言-Permutations

来源:互联网 发布:女装淘宝代理加盟 编辑:程序博客网 时间:2024/06/05 15:46

TItle:

Given a collection of distinct numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:

[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]]

这道题目是全排列的题目,也就是排列组合,最常用的方法是递归,这里要注意的是,并不是从前往后单方向的推进,前面的数也可以放在后面。因此在递归循环中,需要对全部元素进行递归,当然要排除当前正在使用的数,这里采用的方法是利用标志位,标志当前正在使用的数,待到该数使用完毕,再解封该数。


solution:


void recursive(int** result,int* nums, int numsSize, int* returnSize,bool* used,int* temp, int size){   int i=0;   if (size==numsSize) {   result[*returnSize]=(int*)malloc(sizeof(int)*numsSize);    for (i=0;i<numsSize;i++) {        result[*returnSize][i]=temp[i];    }         size=0;    (*returnSize)++;    return;   }   for (i=0;i<numsSize;i++) {   if (!used[i]) {   used[i]=true;   temp[size]=nums[i];   recursive(result,nums,numsSize,returnSize,used,temp,size+1);   used[i]=false;   }   }}int** permute(int* nums, int numsSize, int* returnSize) {    int** result = (int**)malloc(sizeof(int)*1000000);    bool* used[numsSize];    int* temp[numsSize];    int size=0;    if (numsSize==0 || nums==NULL) {    *returnSize=0;    return result;    }    *returnSize=0;    memset(used,(bool)false,numsSize);    recursive(result,nums,numsSize,returnSize,used,temp,size);    return result;}


原创粉丝点击