Число возможных комбинаций: Каталонское число из N пар C (n).
Эта проблема обсуждалась на форумах joelonsoftware.com довольно широко, включая итеративные, рекурсивные и итеративные / бит-смещающие решения. Там есть несколько классных вещей.
Вот быстрое рекурсивное решение, предложенное на форумах в C #:
C #
public void Brackets(int pairs) {
if (pairs > 1) Brackets(pairs - 1);
char[] output = new char[2 * pairs];
output[0] = '(';
output[1] = ')';
foo(output, 1, pairs - 1, pairs, pairs);
Console.writeLine();
}
public void foo(char[] output, int index, int open, int close,
int pairs) {
int i;
if (index == 2 * pairs) {
for (i = 0; i < 2 * pairs; i++)
Console.write(output[i]);
Console.write('\n');
return;
}
if (open != 0) {
output[index] = '(';
foo(output, index + 1, open - 1, close, pairs);
}
if ((close != 0) && (pairs - close + 1 <= pairs - open)) {
output[index] = ')';
foo(output, index + 1, open, close - 1, pairs);
}
return;
}
Кронштейны (3);
Выход:
()
(()) () ()
((())) (() ()) (()) () () (()) () () ()