LeetCode刷题记录——22括号生成

LeetCode刷题记录——22括号生成

一 题目描述:

  • 数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

  • 示例:

    • 输入:n = 3
      输出:[
          "((()))",
          "(()())",
          "(())()",
          "()(())",
          "()()()"
      ]
      

二 思路:

对于这种题,枚举所有的可能性是最容易想到的,其次就是设置条件,寻找符合条件的解

  • 回溯:

    • 设置两个int型变量,表示左括号和右括号可插入的位置的个数
    • 利用递归调用函数,得到结果
  • void getAns(string str,int l,int r,vector &ans)
    {
    	if (l == 0 && r == 0)
    		ans.push_back(str);
    	if (l > 0)
    		getAns(str + "(", l - 1, r + 1, ans);//每增加一个左括号,就增加一个右括号可以插入的位置,相应的左括号的插入位置减少
    	if (r > 0)
    		getAns(str+")",l,r-1,ans);
    }
    vector generateParenthesis(int n)
    {
    	vector ans;
    	getAns("", n, 0, ans);
    	return ans;
    }
    

你可能感兴趣的:(LeetCode刷题记录——22括号生成)