LeetCode:22. Generate Parentheses(生成匹配括號)
阿新 • • 發佈:2018-12-15
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
方法1:(碰到這種匹配問題,首先想到遞迴,但是相處遞迴需要靈感)
import org.junit.Test; import java.util.ArrayList; import java.util.List; /** * @author zhangyu * @version V1.0 * @ClassName: GenerateParentheses1 * @Description: TOTO * @date 2018/12/15 14:31 **/ public class GenerateParentheses1 { @Test public void fun() { int n = 3; List<String> list = generateParentheses(n); System.out.println(list); } private List<String> generateParentheses(int n) { List<String> list = new ArrayList<>(); if (n < 1) { return null; } bracketTrace(list, "", 0, 0, n); return list; } private void bracketTrace(List<String> list, String s, int left, int right, int n) { if (s.length() == n * 2) { list.add(s); return; } if (left < n) bracketTrace(list, s + "(", left + 1, right, n); if (right < left) bracketTrace(list, s + ")", left, right + 1, n); } }
時間複雜度:O(n^2)
空間複雜度:O(n)