当既可以append "(" 也可以 append ")"时:left == right || left <right,同时generate 这样两个String;不可以的话就append ")": left == 0
public class Solution {
public ListgenerateParenthesis(int n) {
List result = new ArrayList();
Set sets = new HashSet();
helper(sets, n, n, "");
result.addAll(sets);
return result;
}
void helper(Set sets,int left, int right, String last) {
if (left == 0 && right == 0) {
sets.add(last);
return;
}
if (left == 0) {
for (int i= 0; i < right; i++) {
last = last + ")";
}
sets.add(last);
return;
}
if (left == right) {
helper(sets, left-1, right, last + "(");
}
if (left < right) {
helper(sets, left-1, right, last + "(");
helper(sets, left, right-1, last + ")");
}
}
}