2016-03-29 5 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

Хорошо, вы по существу сделали это. Просто добавьте «", используйте HashSet, а не ArrayList, а затем конвертируйте в 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

Смежные вопросы