2016-03-29 15 views
0

私は与えられた文字列のパワーセットを生成するメソッドを作成しようとしています。今のところ、私は間違って "[abc、bc、c、b、ac、c、a、ab、b、a]"を出力するこれを思いついた。文字列のパワーセットを生成する

public static ArrayList<String> powerSet(String s){ 
     ArrayList<String> set = new ArrayList<String>(); 

     if(!s.isEmpty()) 
     set.add(s); 

     for(int i=0; i<s.length();i++){ 
      String substring = s.substring(0, i) + s.substring(i+1); 
      set.addAll(powerSet(substring)); 
     } 


     return set; 
    } 

これは宿題の一部のためである、と私はヘルパークラスの任意の並べ替えを作成することはできませんよ、と方法は、型のArrayListでなければなりません。メソッドには再帰が必要です。

ご協力いただきありがとうございます。

+1

答えは何をすべきですか?秩序は重要か? –

+0

@PaulBoddington順序は関係ありませんが、 "a"、 "b"、 "c"、 "ab"、 "ac"、 "bc"、 "abc" 。 – skulltula

+1

さて、あなたは本質的にそれをやっています。単に ""を追加し、ArrayListではなくHashSetを使用し、最後にArrayListに変換します。 –

答えて

1

私は通常自分の解決策を見つけるために私の友人を助けます...
しかし、今回はコードを教えてください...それをお読みください!!コピーしないでください!!

public static ArrayList<String> powerSet(String s){ 
    ArrayList<String> ans = new ArrayList<String>(); 

    if(s.isEmpty()){ 
     ans.add(""); 
     return ans; 
    } 

    ArrayList<String> withFirstElem = new ArrayList<String>(); 
    ArrayList<String> withoutFirstElem = new ArrayList<String>(); 

    withoutFirstElem = powerSet(s.substring(1)); 

    for(String i : withoutFirstElem){ 
     withFirstElem.add(i+s.charAt(0)); // adding first elem 
    } 
    ans.addAll(withFirstElem); 
    ans.addAll(withoutFirstElem); 

    return ans; 
} 
0
String input = "abc"; 

for (int i = 1; i <(int) Math.pow(2,input.length()) ; i++) { 

    String eleman = ""; 
    int arrayindex = 0; 

    for (int k = input.length() -1; k >= 0; k--) { 

     String index = ((i >> k) & 1) == 1 ? "1" : "0"; 

     if(index == "1"){ 
      eleman += input.charAt(arrayindex); 
     } 
      arrayindex++; 
     } 

     System.out.println(eleman); 
    }  

と答える

c 
b 
bc 
a 
ac 
ab 
abc 
+0

、文字列が "abcd"の場合は? – alfasin

関連する問題