题目
代码实现:
Java
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<String>();
DFS(n,"",list,0,0);
return list;
}
public void DFS(int n,String str,List<String> list,int left,int right){
if(left<right || left>n) return;
if(str.length() == 2*n){
list.add(str);
return;
}
DFS(n,str+"(",list,left+1,right);
DFS(n,str+")",list,left,right+1);
}
}
C++
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
int left = 0,right = 0;
DFS(res,"",n,left,right);
return res;
}
void DFS(vector<string>& res,string str,int n,int left,int right){
if(right > left || left > n) return;
if(str.length() == 2*n){
res.push_back(str);
return;
}
DFS(res,str+"(",n,left+1,right);
DFS(res,str+")",n,left,right+1);
}
};
如果对双重递归不熟悉,可以看看我的这篇博客。
或者将代码复制到eclipse,去debug一下,看看变量值的变化和执行过程。