问题描述:
输入括号对数,输出所有的合法组合,比如输入1,输出"()",输入3,输出"()()(), (()()), ()(()), (())(), ((()))"。
思路分析:
面对这种问题,其实一开始想通如何使用递归是不太容易的,不妨一一列举出来,发现其相应的规律。可以发现,增加一个单位,则都会在其上一个集合上每个元素的左面、右面和整体的外面加上一层括号。那么就会产生大量的重复元素,所以,我们使用Set集合进行去重。
具体代码如下:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Hfkh {
//合法括号求解(递归)
static Set<String> hfkh(int a)
{
Set<String> set=new HashSet<>();//使用set集合可以去除重复字段
if (a==1)//递归出口
{
set.add("()");
return set;
}
Set<String> set_1=hfkh(a-1);//递归找到上一层括号集合
for (String b:set_1)//利用循环对其左中右进行括号的相应的插入
{
set.add("()"+b);
set.add(b+"()");
set.add("("+b+")");
}
return set;
}
public static void main(String[] args) {
Scanner a=new Scanner(System.in);//数据输入
int b=a.nextInt();
Set<String> set=hfkh(b);
System.out.println(set);
}
}
其运行结果如下: