1. 程式人生 > 其它 >leetcode 22括號生成 暴力法

leetcode 22括號生成 暴力法

搬個官方題解

class Solution {
    bool valid(const string& str) {//驗證是否合法
        int balance = 0;
        for (char c : str) {
            if (c == '(') {
                ++balance;
            } else {
                --balance;
            }
            if (balance < 0) {
                return false
; } } return balance == 0; } void generate_all(string& current, int n, vector<string>& result) { if (n == current.size()) { if (valid(current)) { result.push_back(current); } return; } current
+= '('; generate_all(current, n, result); current.pop_back(); current += ')'; generate_all(current, n, result); current.pop_back(); } public: vector<string> generateParenthesis(int n) { vector<string> result; string current; generate_all(current, n
* 2, result); return result; } };
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList<String>();
        backtrack(ans, new StringBuilder(), 0, 0, n);
        return ans;
    }

    public void backtrack(List<String> ans, StringBuilder cur, int open, int close, int max) {
        if (cur.length() == max * 2) {
            ans.add(cur.toString());
            return;
        }
        if (open < max) {
            cur.append('(');
            backtrack(ans, cur, open + 1, close, max);
            cur.deleteCharAt(cur.length() - 1);
        }
        if (close < open) {
            cur.append(')');
            backtrack(ans, cur, open, close + 1, max);
            cur.deleteCharAt(cur.length() - 1);
        }
    }
}

作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/generate-parentheses/solution/gua-hao-sheng-cheng-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。