2012-08-30 8 views
6

Ich bin ein Gymnasiast der 10. Klasse, der versucht, einige Probleme in einem Buch über Datenstrukturen und Algorithmen auf Java zu lösen.String-Permutationen in Java (nicht-rekursiv)

Eine der Fragen ist, alle Permutationen einer Zeichenfolge zu drucken.

class C14 
{ 
public static void main(char a[]) 
{ 
    // char[] a = {'c','a','r','b','o','n'}; 
    int c=0,w=0; 
    for(int q = 0;q<a.length;q++) 
    { 
     for(int i=0;i<a.length;i++) 
     { 
      for(int j=1;j<a.length;j++) 
      { 
       for(int k=1;k<a.length-1;k++) 
       { 
        for(int z=0;z<a.length;z++) 
        { 
         System.out.print(a[z]); 
         c++; 
        } 
        w++; 
        System.out.println(); 
        char p=a[k+1]; 
        a[k+1]=a[k]; 
        a[k]=p; 
       } 
       System.out.println(); 
      } 
      System.out.println(); 
      char x=a[0]; 
      a[0]=a[1]; 
      a[1]=x; 
     } 
     } 
    System.out.println(" Character count = " + c); 
    System.out.println(" Word count = " + w); 
    } 
} 

Dies ist mein Versuch. Das Buch fordert mich auf, es für die Buchstaben c, a, r, b, o, n zu tun. Meine Lösung tut genau das, aber wenn ich versuche, 3 oder 4 Buchstaben zu verwenden, gibt es mir Wiederholungen. Wenn ich die äußerste Schleife entferne und versuche, sie zu drucken, funktioniert sie für Wörter mit 3 und 4 Buchstaben, aber nicht für Wörter mit 5 + Buchstaben.

Ich werde froh sein, meine Argumentation dafür zu klären, ich weiß, es ist nicht die effizienteste, aber bedenken Sie die Tatsache, dass ich nur in der 10. Klasse bin und das kam mir zuerst in den Sinn.

Kann mir bitte jemand helfen oder zumindest einen Hinweis darauf geben, was falsch ist? Bitte geben Sie keine rekursive Lösung an, da ich sie zuerst iterativ durcharbeiten möchte. Danke, Sumit.

+0

was ist das - http://stackoverflow.com/questions/11915026/permutations-of-string-using-iteration? –

+0

Danke für die Antwort. Bin dankbar. Aber das Problem ist, ich glaube nicht, dass ich StringBuilder und Teilstring - Funktionen, etc. (Nicht erlaubt) –

+1

Sie wollen Permutation auf dem Array 'a' durchführen, ohne die Schleifen jedes Mal zu ändern, wenn sich die Größe von 'a' ändert? – John

Antwort

3

Permutation mit Wiederholungen

Wenn Sie n Dinge zur Auswahl ... Sie haben n Auswahl jedes Mal!

Wenn r von ihnen die Wahl, die Permutationen sind:

n × n × ... (r mal) = n^r

Ich stelle 2 Fälle. Der erste Fall ist, wenn wir die Größe von n und r bereits kennen, und es ist die einfache. Die Sekunde, wenn n und r dynamisch sind.

//when n and r are known statically 

class Permutation 
{ 
    public static void main(String[] args) 
    { 
     char[] values = {'a', 'b', 'c', 'd'}; 
     int n = values.length; 
     int r = 2; 

     int i = 0, j = 0; 
     for(i=0; i<n; i++) 
     { 
      for(j=0; j<n; j++) 
      { 
       System.out.println(values[j] + " " + values[i]); 
      } 
     } 
    } 
} 


//when n and r are known only dynamically 

class Permutation 
{ 
    public static void main(String[] args) 
    { 
     char[] values = {'a', 'b', 'c', 'd'}; 
     int n = values.length; 
     int r = 2; 
     int i[] = new int[r]; 
     int rc = 0; 
     for(int j=0; j<Math.pow(n,r); j++) 
     { 

      rc=0; 
      while(rc<r) 
      { 
       System.out.print(values[i[rc]] + " "); 
       rc++; 
      } 
      System.out.println(); 
      rc = 0; 
      while(rc<r) 
      { 
       if(i[rc]<n-1) 
       { 
        i[rc]++; 
        break; 
       } 
       else 
       { 
        i[rc]=0; 
       } 
       rc++; 
      } 
     } 
    } 
}