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. 括号生成-全排列-回溯的主要内容,如果未能解决你的问题,请参考以下文章