题目:
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); } } };
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); } } }
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]