[LeetCode] Generate Parentheses

目录

 

问题

分析

代码


问题

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

分析

关于括号的问题最简单的方法就是用一个辅助栈,使用辅助栈,实际上得到的信息是什么?其实是已经使用的左右括号的差值。左括号当然是可以随时加入的,右括号只有在串中左括号比右括号多的时候才能加入。当备用的左右括号都用光了,就产生了一个符合要求的串。

写一个递归函数,处理以上三种情况,其他情况不用管,判定不过直接就return了。


代码

VS开着,顺手用C++写了,里面没什么C++独有的特性,Java写起来差不多。

递归函数的参数分别是:剩余左括号、剩余右括号、当前字符串、答案

class Solution {
public:
    vector generateParenthesis(int n) {
        vector ans;
        generate(n, n, "", ans);
        return ans;
    }
    void generate(int left, int right, string str, vector &ans)
    {
        if(left == 0 && right == 0)
            ans.push_back(str);
        if(left > 0)//可以放入左括号
            generate(left-1, right, str+'(', ans);
        if(left < right)//可以放入右括号
            generate(left, right-1, str+')', ans);
    }
};

 

 

你可能感兴趣的:(Leetcode题解,java实现)