2016-03-29 13 views
0

Belirli bir dizenin güç kümesini oluşturan bir yöntem oluşturmaya çalışıyorum. Şimdiye kadar, yanlış bir şekilde "[abc, bc, c, b, ac, c, a, ab, b, a]" çıktılar.Bir String'in güç kümesinin oluşturulması

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

Bu ödevin parçası içindir ve ben yardımcı sınıfının her türlü oluşturmak için izin yok, ve yöntem tipi ArrayList olmalıdır. Yöntem, yinelemeyi içermelidir.

Herhangi bir yardım için minnettarım!

+1

cevap ne olmalıdır? Sipariş önemli mi? –

+0

@PaulBoddington Sıralama önemli değil, ama doğru cevap "", "a", "b", "c", "ab", "ac", "bc", "abc" satırları boyunca bir şey olmalı. . – skulltula

+1

Tamam, peki aslında bunu yaptın. Sadece "" ekleyin, ArrayList yerine HashSet'i kullanın, ardından sonunda bir ArrayList'e dönüştürün. –

cevap

1

Genellikle arkadaşlarımın kendi çözümlerini bulmasına yardım ediyorum ...
ama bu sefer sadece kodu vereceğim ... lütfen okuyun! kopyalama!

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); 
    }  

cevap

c 
b 
bc 
a 
ac 
ab 
abc 
+0

ve dize "abcd" ise? – alfasin