原題地址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; } };