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:
"((()))", "(()())", "(())()", "()(())", "()()()"
思路:该题目进行转换,n个括号匹配。其实可以看做n个左括号和n个右括号,每次放一个括号。
每次可以有两种选择,左括号或者右括号,共放2n个。需要满足条件:放置的(数要不小于放置的)数。 是一道DFS题目
思路二: 2n个(和)排序,然后挑选满足条件的排列。时间复杂度过高。 也考虑考虑用栈实现,每次压入满足条件的(或者)括号。
java代码:
- List<String> res = new ArrayList<String>();
- void generateHelper(int left,int right,String cur) {
- if(left>right) return;
- if(right==0) {
- res.add(new String(cur));
- return;
- }
- if(left>=1) generateHelper(left-1,right,cur + '('); //用临时变量,返回值恢复原值
- if(right>=1) generateHelper(left,right-1,cur + ')');
- }
- public List<String> generateParenthesis(int n) {
- if(n==0) return res;
- String cur = "";
- generateHelper(n,n,cur);
- return res;
- }
如果用StringBuffer,则
- List<String> res = new ArrayList<String>();
- void generateHelper(int left,int right,StringBuffer cur) {
- if(left>right) return;
- if(right==0) {
- res.add(new String(cur));
- return;
- }
- if(left>=1) {
- generateHelper(left-1,right,cur.append('('));
- cur.deleteCharAt(cur.length()-1);
- }
- if(right>=1) {
- generateHelper(left,right-1,cur.append(')'));
- cur.deleteCharAt(cur.length()-1);
- }
- }
- public List<String> generateParenthesis(int n) {
- if(n==0) return res;
- StringBuffer cur = new StringBuffer();
- generateHelper(n,n,cur);
- return res;
- }

浙公网安备 33010602011771号