package code; /* * 22. Generate Parentheses * 题意:正确括号组合 * 难度:Medium * 分类:String, Backtracking * 思路:回溯法的典型题目,按选优条件向前搜索,达到目标后就退回一步或返回 * 注意:递归法别忘了两块的拼接,例如n=4时,可以由2,2拼起来作为答案 * lc32, lc22, lc301 */ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class lc22 { public static void main(String[] args) { System.out.println(generateParenthesis2(4)); } public static List generateParenthesis(int n) { //递归法 Set res = new HashSet(); if(n==1) { res.add("()"); return new ArrayList(res); } List temp = generateParenthesis(n-1); // 一个括号,和n-1个括号的组合 for (int i = 0; i < temp.size(); i++) { res.add("("+temp.get(i)+")"); res.add("()"+temp.get(i)); res.add(temp.get(i)+"()"); } //2块拼一起 for (int j = 2; j <=n/2 ; j++) { List temp1 = generateParenthesis(j); List temp2 = generateParenthesis(n-j); for (int i = 0; i generateParenthesis2(int n) { //回溯法 ArrayList res = new ArrayList<>(); backtracking(res,"", 0, 0, n); return res; } public static void backtracking(List list,String str,int left, int right, int max){ if(right==max){ list.add(str); } if(left