2016-03-21 14 views
0

私は、入力された文字列の順列を生成する次のコードを持っていますが、forループ、再帰だけを使用しないように変更することは可能ですか?Java:順列を生成する別の方法は?

public static void findPermutations (String beginningString, String endingString) { 
    if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 
    else 
     for (int i = 0; i < endingString.length(); i++) { 
     try { 
      String newString = endingString.substring(0, i) + endingString.substring(i + 1); 

      permuteString(beginningString + endingString.charAt(i), newString); 
     } catch (StringIndexOutOfBoundsException exception) { 
      exception.printStackTrace(); 
     } 
     } 
} 
+0

ループは常に再帰を使用して記述することができ、その逆もあります。大きな問題は、通常、「パフォーマンス対可読性」です。 – Maroun

+0

私の感想は、ループのない解決法はかなり読めないということです。 –

+0

'StringIndexOutOfBoundsException'は実際にはキャッチされるべきものではなく、長さとインデックスをチェックすることで完全に回避できます。 –

答えて

0

私は他のどこかで見つけたので、私には信用できません。再度質問を見つけることができません。

public class Permutations { 

    // print N! permutation of the characters of the string s (in order) 
    public static void perm1(String s) { perm1("", s); } 
    private static void perm1(String prefix, String s) 
    { 
     int N = s.length(); 
     if (N == 0) 
     { 
      System.out.println(prefix); 
     } 
     else { 
      for (int i = 0; i < N; i++) 
       perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N)); 
     } 

    } 

    // print N! permutation of the elements of array a (not in order) 
    public static void perm2(String s) { 
     int N = s.length(); 
     char[] a = new char[N]; 
     for (int i = 0; i < N; i++) 
      a[i] = s.charAt(i); 
     perm2(a, N); 
    } 

    private static void perm2(char[] a, int n) { 
     if (n == 1) { 
      if(new String(a).contains("ncl-")) 
       System.out.println(a); 
      return; 
     } 
     for (int i = 0; i < n; i++) { 
      swap(a, i, n-1); 
      perm2(a, n-1); 
      swap(a, i, n-1); 
     } 
    } 

    // swap the characters at indices i and j 
    private static void swap(char[] a, int i, int j) { 
     char c = a[i]; 
     a[i] = a[j]; 
     a[j] = c; 
    } 



    public static void main(String[] args) throws IOException { 
     //String word = "nst n-eitoira cp2vmamoocnla1e k nfto-k7re id6"; 
     String word = "doggy"; 
     perm1(word); 
     System.out.println(); 
     perm2(word); 
    } 
} 
関連する問題