給定一個括號序列,寫一個函數用於生成正確形式的括號組合。
例如,給定n = 3,一個解決方案集是:
((())), (()()), (())(), ()(()), ()()()
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
((())), (()()), (())(), ()(()), ()()()
class Solution {
public:
vector result;
vector generateParenthesis(int n) {
generate(0, 0, , n);
return result;
}
void generate(int left, int right, string s, int n) {
if(right == n) {
result.push_back(s);
}
else
{
if(left < n)
{
generate(left + 1, right, s + (, n);
}
if(right < left)
{
generate(left, right + 1, s + ), n);
}
}
}
};
我自己寫的是用排列組合加上第20題的代碼,有些繁瑣不如上面的解法,為了更直觀的理解這個遞歸的過程,就畫了下面這個示意圖。輕拍……