2016-06-22 17 views
-1

ネストされたループを使用して、指定された文字列のすべての置換を印刷する再帰メソッドを作成しました。すべての置換を出力しますが、これを解決するには?ネストされたループを使用した文字列の置換の取得

public static String swap(String x,int a,int b){ 
    char list[]=x.toCharArray(); 
    char tmp=x.charAt(a); 
    list[a]=list[b]; 
    list[b]=tmp; 
    return new String(list); 
} 
public static void perm(String x,String base){ 
    if(base.length()==3) 
     System.out.println(base); 
    for(int i=0;i<x.length();i++) 
     for(int j=i;j<x.length();j++){ 
      String tmp=swap(x,i,j); 
      perm(tmp.substring(1),base+tmp.charAt(0)); 
     } 
} 

例: 入力: "abc" 出力: ABC ACB ABC BAC BCA BAC CBA タクシー CBA ABC ACB ABC ACB ABC ACB ABC ACB ABC。

+0

入力、予想出力、実際の出力を含めることができますか。 – bhspencer

+0

@bhspencerには、 –

+0

が追加されました。パーマネントメソッドの残りの部分はどこですか? –

答えて

0

以下は、コードに基づいて作成した修正版です。

public static void main(String[] args) { 
    String str = "abc"; 
    char[] chars = str.toCharArray(); 
    perm(chars, 0); 
} 

public static void swap(char[] x, int a, int b) { 
    char tmp = x[a]; 
    x[a] = x[b]; 
    x[b] = tmp; 
} 

public static void perm(char[] x, int idx) { 
    if (idx == x.length) { 
     for (int i = 0; i < x.length; i++) 
      System.out.print(x[i]); 
     System.out.println(); 
    } 

    for (int i = idx; i < x.length; i++) { 
     swap(x, idx, i); 
     perm(x, idx + 1); 
     swap(x, idx, i); 
    } 
} 
関連する問題