题
思
写成这样也能过啊,今天额外宽容。。
就把所有可能枚举了一下,有效的筛出来,set去下重。。
代码
class Solution {
public List<String> generateParenthesis(int n) {
Set<String> set = new HashSet<String>();
getAllValid(n, set, "");
return new ArrayList<String>(set);
}
private void getAllValid(int n, Set<String> result, String temp) {
if (temp.length() >= 2 * n) {
if (valid(temp)) {
result.add(temp);
} else {
return;
}
} else {
getAllValid(n, result, temp + "(");
getAllValid(n, result, temp + ")");
}
}
private boolean valid(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
stack.add('(');
} else if (stack.isEmpty()) {
return false;
} else {
stack.pop();
}
}
if (stack.isEmpty()) {
return true;
}
return false;
}
}