LCR 157. El orden de los elementos del menú fijo

LCR 157. El orden de los elementos del menú fijo

Una tienda registra los productos utilizados para formar un menú fijo como la cadena de bienes, donde bienes[i] representa el producto correspondiente. Por favor devuelva el arreglo completo de los productos incluidos en el paquete.

No existe ningún requisito de orden para los resultados devueltos, pero no pueden contener elementos repetidos.

Ejemplo 1:

Tipo:bienes = “agew”
Tipo:[“aegw”,“aewg”,“agew”,“agwe”,“aweg”,“awge”,“eagw”,“eawg”,“egaw”,“egwa”, “ewag”, “ewga”, “gaew”, “gawe”, “geaw”, “gewa”, “gwae”, “gwea”, “waeg”, “wage”, “weag”, “wega”, “wgae ”, “wgea”]

Para tal problema, simplemente use el recorrido en profundidad primero, el código para resolver el problema es el siguiente:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

 bool judge(char *s,int nowsize,char ch){
    
    
      if(nowsize==0){
    
    
          return true;
      }
      else{
    
    
          for(int i=0;i<nowsize;i++){
    
    
              if(s[i]==ch){
    
    
                  return false;
              }
          }
          return true;

      }

 }

int size;

 void dfs(char *re,char* goods, int nowsize,int sl,char **ret,int *r){
    
    
     char a[sl];
     int p=0;
    if(nowsize==sl){
    
    
        re[nowsize]='\0';
    //    printf("%s ",re);
        strcpy(ret[size],re);
        size++;
    }
    else{
    
    


        for(int i=0;goods[i]!='\0';i++){
    
    
            int flag=0;
            for(int j=0;j<p;j++){
    
    
                if(goods[i]==a[j]){
    
    
                    flag=1;
                    break;
                
                }
            }
            if(flag==1){
    
    
                continue;
            }

            if(r[i]==0){
    
    
                a[p++]=goods[i];
                re[nowsize]=goods[i];
                r[i]=1;
                dfs(re,goods,  nowsize+1,sl,ret,r);
                   r[i]=0;
                
            }
            
           
            
        }
    }
 }

 
char** goodsOrder(char* goods, int* returnSize) {
    
    
    
  int sl=strlen(goods);
  int count=1;
  int *r=(int *)malloc(sizeof(int)*sl);

  
  size=0;
  for(int i=1;i<=sl;i++){
    
    
      count=count*i;
      r[i-1]=0;
  }
  char *re=(char *)malloc(sizeof(char)*(sl+1));
  char **ret=(char **)malloc(sizeof(char*)*(count));

  for(int i=0;i<count;i++){
    
    
      ret[i]=(char *)malloc(sizeof(char )*(sl+1));
  }
   dfs(re,goods,  0,sl,ret,r);
 
   *returnSize=size;
   return ret;
  
    
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43327597/article/details/133235506
Recomendado
Clasificación