当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

[Leetcod] Generate Parentheses 产生括号

作者:小梦 来源: 网络 时间: 2024-01-14 阅读:

Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

回溯法

复杂度

时间 O(N) 空间 O(N) 递归栈

思路

当我们放置一个新的符号时,我们有两个选择,放置左括号,或者放置右括号,但是按照题意我们最多放置n个左括号,放一个剩余可放置左括号就少一个,但剩余可放置右括号则多了一个。而对于右括号,必须前面放了一个左括号,我们才能放一个右括号。所以我们根据剩余可放置左括号,和剩余可放置右括号,代入递归,就可以求解。

代码

public class Solution {        List<String> res = new LinkedList<String>();        public List<String> generateParenthesis(int n) {        helper(n, 0, "");        return res;    }        private void helper(int left, int right, String tmp){        // 如果左括号右括号都放完了,则找到一个结果        if(left == 0 && right == 0){res.add(tmp);return;        }        // 对于每个位置,我们有两种选择,要么放左括号,要么放右括号        if (left > 0){helper(left - 1, right + 1, tmp+"(");        }        if (right > 0){helper(left, right - 1, tmp+")");        }    }}

热点阅读

网友最爱