22. Generate Parentheses

来源:互联网 发布:大数据可以研究什么 编辑:程序博客网 时间:2024/06/03 17:29


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:[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

思路

这个题目是直接的,一看便知有点栈的意思,再想到递归可以实现。
1. 初始状态string s=””
2. 如果n等于0,直接返回[]
3. 递归每次判断剩余的右括号数是否大于0,若大于0,则s后加“)”,同时rightpar个数减去1,rightpar的初始值为0;
4. 同理,若左括号大于0,则s后加”(“,同时leftpar个数减去1,rightpar个数加上1.
5. 递归返回的条件,左右括号个数同时为0.

public class Solution {    public List<String> generateParenthesis(int n) {        List<String> rtn = new ArrayList<String>();        addparas(rtn,"",n,0);        return rtn;    }    //leftpar: left parenthesis count    //rightpar: right parenthesis count    private void addparas(List<String> list, String s, int leftpar, int rightpar){        if(leftpar==0 && rightpar==0){            list.add(s);            return;        }        if(rightpar>0)            addparas(list,s+")",leftpar,rightpar-1);        if(leftpar>0)            addparas(list,s+"(",leftpar-1,rightpar+1);    }}
原创粉丝点击