当前位置: 代码迷 >> 综合 >> leetcode22. 括号生成(回溯)
  详细解决方案

leetcode22. 括号生成(回溯)

热度:63   发布时间:2024-02-05 12:46:47.0

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

示例:

输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

代码

class Solution {ArrayList<String> strings=new ArrayList<>();public List<String> generateParenthesis(int n) {generatePa(n,0,0,new StringBuilder());return strings;}public void generatePa(int n,int left,int right,StringBuilder stringBuilder) {if(left==n&&right==n) {//匹配完成strings.add(stringBuilder.toString());return;} if(right+1<=left)//有足够的(匹配{stringBuilder.append(')');generatePa(n,left,right+1,stringBuilder);stringBuilder.deleteCharAt(stringBuilder.length()-1);//回溯}if(left+1<=n)//有足够的(可以用{stringBuilder.append('(');generatePa(n,left+1,right,stringBuilder);stringBuilder.deleteCharAt(stringBuilder.length()-1);}}
}