一、题目
Implement an algorithm to print all valid ( properly opened and closed) combinations of n-pairs of parentheses.
二、思路及其代码实现
关系:S(n) = S(n-1)中每一个元素与1对括号配对组合之和
(1对新括号可以加在当前组合元素的左边、右边、或括起来包含在内。 注意:当前元素看成一个整体,不可拆)
实现方式一:递归
/**
* way01——递归
* @param n 括号对数
* @return 合法括号集合
*/
public static Set<String> validCombination01(int n) {
Set<String> s_n = new HashSet<>();
if (n == 1) {
s_n.add("()");
return s_n;
}
Set<String> s_n_1 = validCombination01(n-1);
for (String str : s_n_1) {
s_n.add("()" + str);//元素左边加括号
s_n.add("(" + str + ")");//包裹元素
s_n.add(str + "()");//元素右边加括号
}
return s_n;
}
实现方式二:迭代
/**
* way02——迭代
* @param n 括号对数
* @return 合法括号集合
*/
public static Set<String> validCombination02(int n) {
Set<String> set = new HashSet<>();//存放最终组合
set.add("()");
if (n == 1) return set;
for (int i = 2; i < n+1; i++) {//i代表括号对数
Set<String> temp = new HashSet<>();//临时存放每个set元素的三种组合的集合
for (String str : set) {
temp.add("()" + str);//元素左边加括号
temp.add("(" + str + ")");//包裹元素
temp.add(str + "()");//元素右边加括号
}
set = temp;//更新
}
return set;
}