22. 括号生成-全排列-回溯

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22. 括号生成-全排列-回溯相关的知识,希望对你有一定的参考价值。

一、题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]

二、解题

回溯

这题跟全排列一样,列举全部的组合,所以使用回溯算法,先写终止条件,然后在根据左右括号的数量去递归执行。

class Solution 
    public List<String> generateParenthesis(int n) 
        List<String> ans = new ArrayList<String>();
        backtrack(ans, new StringBuilder(), 0, 0, n);
        return ans;
    

    public void backtrack(List<String> ans, StringBuilder cur, int open, int close, int max) 
        if (cur.length() == max * 2) 
            ans.add(cur.toString());
            return;
        
        if (open < max) 
            cur.append('(');
            backtrack(ans, cur, open + 1, close, max);
            cur.deleteCharAt(cur.length() - 1);
        
        if (close < open) 
            cur.append(')');
            backtrack(ans, cur, open, close + 1, max);
            cur.deleteCharAt(cur.length() - 1);
        
    

以上是关于22. 括号生成-全排列-回溯的主要内容,如果未能解决你的问题,请参考以下文章

22. 括号生成(回溯+剪枝)

22. 括号生成(回溯+剪枝)

22. 括号生成(回溯+剪枝)

[LeetCode] 22. 括号生成(回溯/DP)

[22]. 括号生成

Leetcode22. 括号生成(简单回溯)