я должен объединить значения в наборе таким образом:Как это сделать в java?
Вход:
{A,B,C,D}
Результат:
{AB, ABC, AC, AD, ACD, ABD, ABCD, BC, BD, BCD, CD}
Как я могу это сделать?
я должен объединить значения в наборе таким образом:Как это сделать в java?
Вход:
{A,B,C,D}
Результат:
{AB, ABC, AC, AD, ACD, ABD, ABCD, BC, BD, BCD, CD}
Как я могу это сделать?
Есть несколько решений в зависимости от размера ввода:
Если вход-массив < = 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);
спасибо, но теперь я хочу сравнить элементы combation. Поэтому, если у меня есть AB и ABC, я хочу сравнить A с B и AB с C – user3195053
@ user3195053, это обеспечивается рекурсивным решением. что именно вы подразумеваете под этим сравнением? лексикографический порядок? – Paul
no не является импортным и лексикографическим заказом. Я хочу сравнить все возможные комбинации. Например, если у меня есть такой ввод: Set: {A: {1,2,3}, B: {1,2}, C: {1}} Результат должен быть: A, B: {1 , 2}; A, C: {1}; A, B, C: {1} – user3195053
Вы сделать это Усин g 'for', циклы' while' или рекурсивные функции. – Andreas
Добро пожаловать в переполнение стека! Пожалуйста, примите [тур], осмотритесь и прочитайте [помощь], в частности [* Как задать хороший вопрос?] (/ Help/how-to-ask) –
притвориться, что у вас есть 4 двоичный код. найти все числа, которые имеют по крайней мере два 1s. Таким образом, ваш результат будет эквивалентен {1100,1110,1010,1001,1111,0110,0101,0111,0011) – ergonaut