原题地址code
个人思路:
1.须要全部的可行解,隶属dfs + backtraing 的大类
2.每次当前状态可能的下行状态有两种可能性:
2.1 可否补上'(',补上'('的条件是xl < n
2.2 可否补上')',补上')'的条件是xl < xrip
class Solution { public: void dfs(vector<string> &vct,string & cur,int xl,int n) { int xr = cur.length() - xl; if(xl + xr == n * 2) { vct.push_back(cur); return; } if(xl < n) { cur += '('; dfs(vct,cur,xl + 1,n); cur = cur.substr(0,cur.length() - 1); } // 这里须要注意的是:只有')'数小于'('数的时候才能补上')' if(xr < xl) { cur += ')'; dfs(vct,cur,xl,n); cur = cur.substr(0,cur.length() - 1); } } vector<string> generateParenthesis(int n) { vector<string> vct; if(n <= 0) return vct; string cur; dfs(vct,cur,0,n); return vct; } };