LeetCode:22. 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:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

方法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)

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/85014549
今日推荐