深度优先搜索:
有剩余的左括号,则有左子树;有剩余的右括号,则有右子树。但如果剩余的左括号严格大小剩余的右括号,则剪枝return。当两者都为0时,则找到一种情况。
Java:
class Solution {
public List<String> generateParenthesis(int n) {
//深度优先搜索,减枝
List<String> list=new ArrayList<String>();
dfs(n,n,"",list);
return list;
}
public void dfs(int left,int right,String curstr,List<String> list){
if(left==0&&right==0){
list.add(curstr);
return;
}
if(left>right) return;
if(left>0){
dfs(left-1,right,curstr+"(",list);
}
if(right>0){
dfs(left,right-1,curstr+")",list);
}
}
}
C++