生成括号
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
这也是简单的回溯算法,先写n个左括号,然后就写右括号,每当完成一组之后,就吧字符串存起来。然后再倒退步骤到写第n-1个左括号,然后写右括号,在写左括号,再全写右括号。依次回溯递归,每完成一趟就回到能再改变的位置。
代码如下:
import java.util.ArrayList; import java.util.List; public class 生成括号 { public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<>(); chuli("", list, n, n); return list; } public static void chuli(String s, List<String> list,int left, int right) { if (left>right) { return; } if (left>0) { chuli(s+"(", list, left-1, right); } if (right>0) { chuli(s+")", list, left, right-1); } if (left==0&&right==0) { list.add(s); return; } } }