From LeetCode No.22;
Tier:Medium
Content:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example:
input:n=3
[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]
A Solution With Java(Not Recommended):
class Solution {
static char[] parenthesis={'(',')'};
public List<String> generateParenthesis(int n) {
Set<String> set=new HashSet<>();
resurecursive(new StringBuilder(),set,n);
List<String> list = new ArrayList<>(set);
return list;
}
private void resurecursive(StringBuilder str,Set<String> set,int n){
if(str.length()==2*n){
set.add(str.toString());
return;
}
for(int i=0;i<=str.length();i++){
str.insert(i,parenthesis);
resurecursive(str,set,n);
str.delete(i, i+2);
}
}
}
A Better Solution:
class Solution {
List<String> res=new ArrayList<>();
public List<String> generateParenthesis(int n) {
if(n==0){
return res;
}
backTracing(0,0,"",n);
return res;
}
public void backTracing(int left,int right,String str,int n){
if(left==n&&right==n){
res.add(str);
return;
}
if(left<n){
backTracing(left+1,right,str+"(",n);
}
if(right<left){
backTracing(left,right+1,str+")",n);
}
}
}