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+")");
}
}
这道题唯一要满足的条件就是在任何时候,左括号数量一定要大等于右括号的数量。
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+")");
}
}
相关文章推荐
- Pipeline组项目Postmortem
- 如何让搜索引擎抓取AJAX内容
- Prim算法
- C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误
- Recursion 字符串的全排列 String Permutation @CareerCup
- jqurey 中dialog未定义问题
- Pipeline组Alpha版本发布说明
- Pipeline组测试说明
- C++之I/O流
- webapi调用post时自动匹配参数
- 黑马程序员_JavaBean_内省
- C++ 输入输出
- 老师这份职业
- 老师这份职业
- windows server 2012之搭建DHCP服务器
- poj 2421 Constructing Roads (Kruskal)
- msys 编译 openresty 记录(失败)
- 删除数据
- 更新和删除数据
- jdk环境变量配置