LCR 157. Die Reihenfolge der Speisen im Menü

LCR 157. Die Reihenfolge der Speisen im Menü

Ein Geschäft erfasst die Produkte, aus denen ein Menü besteht, als Zeichenfolge „Waren“, wobei „Waren[i]“ das entsprechende Produkt darstellt. Bitte senden Sie die gesamte im Paket enthaltene Zusammenstellung der Produkte zurück.

Für die zurückgegebenen Ergebnisse ist keine Reihenfolge erforderlich, sie dürfen jedoch keine wiederholten Elemente enthalten.

Beispiel 1:

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

Für ein solches Problem verwenden Sie einfach die Tiefendurchquerung. Der Code zur Lösung des Problems lautet wie folgt:

/**
 * 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;
  
    
}

Guess you like

Origin blog.csdn.net/weixin_43327597/article/details/133235506