- Problem: 給定括號個數, 產生合法的括號排列組合
- Solution:
- 以 recursive 方式來解決
- 當下考慮的是, 還要加入幾個左括號及幾個右括號
- 終止條件: 左右括號都加完了
- 當前條件: 左括號沒有限制, 右括號則需有對應的左括號先加入了才行
- Note: 注意邊際條件 leftCount > 0
- Code
class Solution { public: // recursive solve this problem static void genParenthesis(vector&result, string s, int leftCount, int rightCount) { // when append done, add string to vector if (0 == leftCount && 0 == rightCount) result.push_back(s); // no matter where position, if leftCount > 0, you can add it if (leftCount > 0) genParenthesis(result, s + "(", leftCount - 1, rightCount); // you can append right parenthesis only when rightCount > leftCount if (leftCount < rightCount) genParenthesis(result, s + ")", leftCount, rightCount - 1); } vector generateParenthesis(int n) { vector result; genParenthesis(result, "", n, n); return result; } };
沒有留言:
張貼留言