[LeetCode]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:

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

给出n对括号的所有配对方式。

解题思路


括号串是一个递归结构。因此我们可以一步步构造字符串。
  1. 当左括号出现次数 < n 时,就可以放置新的左括号;
  2. 当右括号出现次数<左括号出现次数时,就可以放置新的右括号;
  3. 终止条件是当左括号数=n时,将字符串末尾添加相匹配个数的右括号,然后添加到list中;

代码


public static List<String> generateParenthesis(int n) {
		List<String> list = new ArrayList<String>();

		if (n == 0) {
			list.add("");
			return list;
		}

		if (n > 0) generate(n, "", 0, 0, list);

		return list;
	}


	/**
	 * @param n 括号对的个数
	 * @param s 字符串
	 * @param l '(' 出现的次数
	 * @param r ')' 出现的次数
	 * @param result
	 */
	public static void generate(int n, String s, int l, int r,
			List<String> result) {
		//当左括号数=n时,将字符串末尾添加相匹配个数的右括号,然后添加到list中;
		if (l == n) {
			char[] ch = new char[n - r];
			Arrays.fill(ch, ')');
			s = s + String.valueOf(ch);
			result.add(s);
			return;
		}
		//当左括号出现次数 < n 时,就可以放置新的左括号;
		generate(n, s + '(', l + 1, r, result);
		//当右括号出现次数<左括号出现次数时,就可以放置新的右括号;
		if (l > r){
			generate(n, s + ")", l, r + 1, result);
		}	
	}



你可能感兴趣的:([LeetCode]Generate Parentheses)