Generate Parentheses

来源:互联网 发布:小票打印机软件 编辑:程序博客网 时间:2024/05/29 06:45
  1. 题目
    给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
    给定 n = 3, 可生成的组合如下:
    “((()))”, “(()())”, “(())()”, “()(())”, “()()()”
  2. 算法
    这道题我们可以用递归来做。每次递归函数中记录左括号l和右括号r的剩余数量,当有l>0时,我们可以直接打印左括号,r>0时,如果此时r>l(剩余的右括号大于左括号,打印过的左括号大于右括号)这时可以打印右括号,当r==0并且l==0时,我们得到一种结果
    public ArrayList<String> generateParenthesis(int n) {        // Write your code here        ArrayList<String> res = new ArrayList<String>();        if (n <= 0) {            return res;        }        helper(n, n, new String(), res);        return res;    }    public void helper(int l, int r, String item, ArrayList<String> res) {        if (l == 0 && r == 0) {  //左右括号剩余数量为0,递归结束            res.add(item);        }        if (l > 0) {  //剩余有左括号直接打印            helper(l - 1, r, item + "(", res);        }        if (r > 0 && r > l) {//剩余有右括号,并且打印的左括号大于右括号            helper(l, r - 1, item + ")", res);        }    }

python

    def helper(self, l, r, item, res):        if l == 0 and r == 0:            res.append(item)            return        if l > 0:            self.helper(l - 1, r, item + '(', res)        if r > 0 and r > l:            self.helper(l, r - 1, item + ')', res)    def generateParenthesis(self, n):        # Write your code here        if n <= 0:            return []        res = []        self.helper(n, n, '', res)        return res
0 0
原创粉丝点击