1

题目详情

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

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

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

想法

  • 输入的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);
        }
    

soleil阿璐
350 声望45 粉丝

stay real ~