解題思路
很明顯需要用到遞迴的方式來解。只是要加 ( 或 ) 的條件不一樣。
( 的話,只要數量還沒到 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; } };
沒有留言:
張貼留言