发现好多面试考察频率高的题目都是考察思想而不是难度。
这个题有想法之后代码很好写。主要是需要想到每次只可能往后加左括号或者右括号, 然后想到两种情况的条件写一个深搜就可以了。左括号只要还没加到n个都可以,右括号需要保证前面有未关闭的左括号,也就是剩余的右括号数量大于左括号的数量。然后没有剩余括号的时候把记录的字符串加到list里面就行了。
class Solution {
private List<String> ans = new ArrayList<String>();
private void work(int left,int right, String st) {
if (left==0&&right==0) {
ans.add(st);
return;
}
if (left!=0) {
work(left-1,right,st+'(');
}
if (left<right) {
work(left,right-1,st+')');
}
}
public List<String> generateParenthesis(int n) {
work(n,n,"");
return ans;
}
}