Recursion n对括号的组合 @CareerCup

来源:互联网 发布:ubuntu切换到登陆界面 编辑:程序博客网 时间:2024/06/05 05:27

看不太习惯书上写的递归,觉得没有自己写的清晰。

这道题唯一要满足的条件就是在任何时候,左括号数量一定要大等于右括号的数量。


package Recursion;import java.util.HashSet;import java.util.Set;/** *Implement an algorithm to print all valid (e.g., properly opened and closed) combinations of n-pairs of parentheses.EXAMPLE:input: 3 (e.g., 3 pairs of parentheses)output: ((())), (()()), (())(), ()(()), ()()()译文:实现一个算法打印出n对括号的有效组合。例如:输入:3 (3对括号)输出:((())), (()()), (())(), ()(()), ()()() *  *  */public class S9_6 {public static void main(String[] args) {Set<String> list = generateParens(3);for (String s : list) {System.out.println(s);}System.out.println(list.size());}public static Set<String> generateParens(int n){Set<String> set = new HashSet<String>();rec(set, n, 0, 0, "");return set;}public static void rec(Set<String> set, int n, int left, int right, String s){if(right > left){// 不合法的括号return;}if(left==n && right==n){// 成功找到一组set.add(s);return;}if(left>n || right>n){// 越界情况return;}rec(set, n, left+1, right, s+"(");// dfsrec(set, n, left, right+1, s+")");}}


原创粉丝点击