46. 全排列-dfs双百代码

本文介绍了如何使用深度优先搜索(DFS)解决全排列问题,给出了一段C++代码实现,包括示例输入和输出。代码中定义了递归函数`dfs`用于搜索排列,并在`permute`函数中初始化和管理递归过程。示例展示了对于不同输入数组的全排列计算。
摘要由CSDN通过智能技术生成

46. 全排列-dfs双百代码

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]



/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */


 int f1(int n){
     int re=1;
     while(n>=1){
         re=re*n;
         n--;
     }
     return re;
 }

int re_size;
 void dfs(int *nums,int numsSize,int *r,int now_size,int *t,int **re){
      int i;
     if(now_size==numsSize){
         re[re_size]=(int *)malloc(sizeof(int )*numsSize);
        
         for(i=0;i<numsSize;i++){
               re[re_size][i]=t[i];
            }
            re_size++;
     }
   else{
          for(i=0;i<numsSize;i++){
         if(r[i]==0){
             t[now_size]=nums[i];
             r[i]=1;
             dfs(nums,numsSize,r,now_size+1,t,re);
             r[i]=0;

                     }
                }
     }


 }
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
  int size=f1(numsSize);
    int **re=(int **)malloc(sizeof(int *)*size);
    *returnColumnSizes=(int *)malloc(sizeof(int)*size);
    

    int *t=(int *)malloc(sizeof(int )*numsSize);
    int r[numsSize];
    int i;
    re_size=0;
     for(i=0;i<size;i++){
         (*returnColumnSizes)[i]=numsSize;
     }
    for(i=0;i<numsSize;i++){
        r[i]=0;
    }
     dfs(nums,numsSize,r,0,t,re);
     *returnSize=re_size;
     return re;

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值