LeetCode 题解(179): Generate Parentheses

题目:

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:

"((()))", "(()())", "(())()", "()(())", "()()()"

题解:

backtracing。起始位置一定是"(",后面的")"使用的个数不能超过"("使用的个数即可。

C++版:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> results;
        string result = "(";
        generate(results, result, n - 1, n);
        return results;
    }
    
    void generate(vector<string>& results, string result, int uL, int uR) {
        if(uL == 0) {
            while(uR > 0) {
                result += ")";
                uR--;
            }
            results.push_back(result);
            return;
        }
        if(uL > 0) {
            result += "(";
            generate(results, result, uL - 1, uR);
            result = result.substr(0, result.length() - 1);
        }
        if(uR > uL) {
            result += ")";
            generate(results, result, uL, uR - 1);
            result = result.substr(0, result.length() - 1);
        }
    }
};

Java版:

public class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> results = new ArrayList<>();
        StringBuffer result = new StringBuffer("(");
        generate(results, result, n - 1, n);
        return results;
    }
    
    public void generate(List<String> results, StringBuffer result, int uL, int uR) {
        if(uL == 0) {
            StringBuffer temp = new StringBuffer(result.toString());
            while(uR > 0) {
                temp.append(")");
                uR--;
            }
            results.add(temp.toString());
            return;
        }
        if(uL > 0) {
            result.append("(");
            generate(results, result, uL - 1, uR);
            result.deleteCharAt(result.length() - 1);
        }
        if(uR > uL) {
            result.append(")");
            generate(results, result, uL, uR - 1);
            result.deleteCharAt(result.length() - 1);
        }
    }
}

Python版:

import copy

class Solution:
    # @param {integer} n
    # @return {string[]}
    def generateParenthesis(self, n):
        results = []
        result = "("
        self.generate(results, result, n - 1, n)
        return results
        
    def generate(self, results, result, uL, uR):
        if uL == 0:
            while uR > 0:
                result += ")"
                uR -= 1
            results.append(copy.copy(result))
        
        if uL > 0:
            result += "("
            self.generate(results, result, uL - 1, uR)
            result = result[:-1]
        if uR > uL:
            result += ")"
            self.generate(results, result, uL, uR - 1)
            result = result[:-1]
                

你可能感兴趣的:(Algorithm,LeetCode,面试题)