我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/generate-parentheses/description/
题目描述:
知识点:递归、回溯
思路一:暴力解法(没有剪枝操作的回溯)
先生成出所有可能的括号组合,再筛选出有效的括号组合。
对于n对括号,其生成的括号组合字符串的长度为2n,因此总共可以生成(2 ^ n)个字符串,在其中筛选出有效的字符串。
由于题目所给的有效括号中只有小括号,我们不需要采用LeetCode020——有效括号的方法,用一个栈来判断,我们只需要遍历字符串,在字符串的每一个字符位置处记录左括号的个数和右括号的个数,如果任一字符的位置处出现了右括号的个数大于左括号的个数,那么这个字符串就是无效的括号组合。最后遍历完该字符串后我们的左括号个数应该和右括号个数相等。
通过上述分析,此思路的时间复杂度是(n * 2 ^ n)级别的。我们将每一个生成的字符串都视为是有效的,而总共有2 ^ n个字符串,每个字符串的长度为n,因此空间复杂度是O(n * 2 ^ n)级别的。
JAVA代码:
public class Solution {
private List<String> list;
List<Character> brackets;
public List<String> generateParenthesis(int n) {
list = new ArrayList<>();
bracket