您的位置:首页 > 其它

Recursion n对括号的组合 @CareerCup

2013-11-27 05:20 316 查看
看不太习惯书上写的递归,觉得没有自己写的清晰。

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

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+"("); // dfs
rec(set, n, left, right+1, s+")");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: