2015-10-03 2 views
-5

я должен объединить значения в наборе таким образом:Как это сделать в java?

Вход:

{A,B,C,D} 

Результат:

{AB, ABC, AC, AD, ACD, ABD, ABCD, BC, BD, BCD, CD} 

Как я могу это сделать?

+1

Вы сделать это Усин g 'for', циклы' while' или рекурсивные функции. – Andreas

+0

Добро пожаловать в переполнение стека! Пожалуйста, примите [тур], осмотритесь и прочитайте [помощь], в частности [* Как задать хороший вопрос?] (/ Help/how-to-ask) –

+0

притвориться, что у вас есть 4 двоичный код. найти все числа, которые имеют по крайней мере два 1s. Таким образом, ваш результат будет эквивалентен {1100,1110,1010,1001,1111,0110,0101,0111,0011) – ergonaut

ответ

0

Есть несколько решений в зависимости от размера ввода:
Если вход-массив < = 64 и входные данные не должны быть отсортированы, мы можем представить каждую комбинацию в качестве long, где каждый бит является 1, если соответствующий элемент в выпускаемой продукции:

void generateCombination(int[] inp){ 
    long upper_bound = (1 << inp.length); 

    for(long rep = 0 ; rep < upper_bound ; rep++){ 
     for(int i = 0 ; i < inp.length ; i++) 
      if(rep & (1 << i) != 0) 
       System.out.print(inp[i]); 

     System.out.print(","); 
    } 
} 

Если выход должен быть отсортирован, можно легко решить эту проблему, используя рекурсивное решение:

void generateCombinations(int[] inp , int[] combination , int at_i , int at_c){ 
    for(int i = at_i + 1 ; i < inp.length ; ++i) 
    { 
     combination[at_c] = inp[i]; 
     System.out.println(Arrays.toString(combination)); 

     generateCombinations(inp , combination , i , at_c + 1); 
    } 

    combination[at_c] = 0; 
} 

//this call will produce all combinations sorted ascending 
generateCombinations(inpt , new int[inp.length] , -1 , 0); 
+0

спасибо, но теперь я хочу сравнить элементы combation. Поэтому, если у меня есть AB и ABC, я хочу сравнить A с B и AB с C – user3195053

+0

@ user3195053, это обеспечивается рекурсивным решением. что именно вы подразумеваете под этим сравнением? лексикографический порядок? – Paul

+0

no не является импортным и лексикографическим заказом. Я хочу сравнить все возможные комбинации. Например, если у меня есть такой ввод: Set: {A: {1,2,3}, B: {1,2}, C: {1}} Результат должен быть: A, B: {1 , 2}; A, C: {1}; A, B, C: {1} – user3195053

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