解題思路
很明顯需要用到遞迴的方式來解。只是要加 ( 或 ) 的條件不一樣。
( 的話,只要數量還沒到 n ,就可以加。
) 的話,除了數量到 n 了沒外,還要看 ( 的數量夠不夠,不然亂加就是 invalid。
終止條件自然是 ( 跟 ) 都夠了。
程式碼
class Solution {
public:
void helper(string s, int open, int close, int n, vector<string>& v)
{
if(open == n && close == n)
v.push_back(s);
if(open < n)
helper(s + "(", open + 1, close, n, v);
if(open > close)
helper(s + ")", open, close + 1, n, v);
}
vector<string> generateParenthesis(int n) {
vector<string> v;
helper("", 0, 0, n, v);
return v;
}
};
沒有留言:
張貼留言