Сложность: medium
Учитывая
n пар круглых скобок, напишите функцию, которая генерирует все возможные комбинации правильных (валидных) круглых скобок.Пример:
Input: n = 3 Output: ["((()))","(()())","(())()","()(())","()()()"]
👨💻 Алгоритм:
1⃣Если
n == 1, возвращаем базовый набор: ["()"].2⃣Для
n > 1 вызываем рекурсивную функцию, которая для n - 1 генерирует все предыдущие комбинации и вставляет "()" в каждую возможную позицию каждой строки.3⃣Используем
Set, чтобы избежать дубликатов, так как одна и та же комбинация может получиться при вставке "()" в разные позиции.😎 Решение:
public List<String> generateParenthesis(int n) {
Set<String> ans = new HashSet<>();
ans = createParenthesis(n, ans);
return new ArrayList<>(ans);
}
private static Set<String> createParenthesis(int n, Set<String> currentList) {
Set<String> temp = new HashSet<>();
if (n <= 0) return new HashSet<>();
if (n == 1) {
temp.add("()");
return temp;
}
currentList = createParenthesis(n - 1, currentList);
for (String parenthesis : currentList) {
for (int i = 0; i <= parenthesis.length(); i++) {
String newStr = parenthesis.substring(0, i) + "()" + parenthesis.substring(i);
temp.add(newStr);
}
}
return temp;
}Ставь 👍 и забирай 📚 Базу знаний