DFS方法解这道题,假设手中拿着n个'('和n个’)', 每次放下一个,手中剩余的left不能比right少,再recusion.
public List<String> generateParenthesis(int n) {
List<String> ret = new ArrayList<String>();
//if(n == 0) return ret;
generate(n, n, "", ret);
return ret;
}
public void generate(int left, int right, String s, List<String> ret) {
if(left == 0 && right == 0) {
ret.add(s);
return;
}
else if(left > right) return;
if(left > 0) generate(left-1, right, s + "(", ret);
if(right > 0) generate(left, right-1, s + ")", ret);
}