leetcode 22 Generate Parentheses

题目详情

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

输入一个正整数n。要求返回一个List<String>,list中包含n组括号全部可能的符合规则的组合。如“(())”就属于符合规则的组合,“)(()”就属于不符合规则的组合。code

例如, 输入 n = 3, 结果集应当是:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]orm

想法

  • 输入的n就表明着咱们的字符串的组成是n个"("和n个")"。
  • 声明一个cur字符串来暂存咱们没次操做得到的字符串,而咱们每次想要将括号加入cur字符串的时候,咱们要保证剩余的括号和现有字符串,能够知足规则。也就是说,若是咱们想加入一个")",咱们要保证cur字符串中的")"的数量小于"("的数量,不然字符串就不符合规则了。
  • 咱们须要跟踪"("和")"的使用状况,来判断下一步的操做是否合法。

解法

public List<String> generateParenthesis(int n) {
            List<String> ans = new ArrayList();
            backtrack(ans, "", 0, 0, n);
            return ans;
        }

        public void backtrack(List<String> ans, String cur, int open, int close, int max){
            if (cur.length() == max * 2) {
                ans.add(cur);
                System.out.println(cur);
                return;
            }

            if (open < max)
                backtrack(ans, cur+"(", open+1, close, max);
            if (close < open)
                backtrack(ans, cur+")", open, close+1, max);
        }
相关文章
相关标签/搜索