这题有点像树的遍历,就是你在每一层可以选择先遍历右节点,也可以选择遍历左子节点。写出来的递归式也很简单,不过造成了很多字符串的浪费。
public List<String> generateParenthesis(int n) {
if(n == 0){
return null;
}
List<String> list = new ArrayList<String>();
String a = "";
getnums(list, a, n, n);
return list;
}
public void getnums(List<String> list, String a, int left, int right){
if(right == 0){
list.add(a);
return;
}
if(left != 0)
getnums(list, a + "(", left-1, right);
if(right > left)
getnums(list, a + ")", left, right-1);
}
image.png