题目
给出一个正整数n,请给出所有的包含n个'('和n个')'的字符串,使得'('和')'可以完全匹配。
例如:'(())()','()()()' 都是合法的; '())()('是不合法的。
输入描述:
输入为1个正整数
输出描述:
输出为所有合法的字符串,用英文逗号隔开
示例1
输入:2 输出:(()),()()
思路
回溯想了半天不对,过了 20% ,参考评论区大佬写的,本意也是深搜
import java.util.*; import java.io.*; class FindLegalStr { private static ArrayList<String> paths = new ArrayList<>(); public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bf.readLine()); solution(n, "", n, n); StringBuilder sb = new StringBuilder(); for (String s : paths) { sb.append(s).append(","); } sb.deleteCharAt(sb.length() - 1); System.out.println(sb.toString()); } private static void solution(int n, String cur, int left, int right) { if (left == 0 && right == 0) { paths.add(cur); return; } if (left < 0 || right < 0 || left > right) { return; } solution(n, cur + "(", left - 1, right); solution(n, cur + ")", left, right - 1); } }
总结
招行信用卡 2018 第二道
考的是对递归使用的功底了!因为知道递归深搜,却写不出来,这次收获一种写法,或许以后可以考虑一下左右两个变量来限制加入到结果集和的时机