题目详情
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);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。