牛客 - 寻找合法字符串

寻找合法字符串

https://www.nowcoder.com/questionTerminal/3690a506d0374981863ca649d97b81b7

题目

给出一个正整数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 第二道
考的是对递归使用的功底了!因为知道递归深搜,却写不出来,这次收获一种写法,或许以后可以考虑一下左右两个变量来限制加入到结果集和的时机

全部评论

相关推荐

09-22 22:22
中山大学 Java
乌鱼子萨奇:羡慕你啊,直接转正了,都不用经历秋招的炼狱,但是你少经历了很多痛苦的事情啊
点赞 评论 收藏
分享
LZStarV:冲就好了,就算真的是字节也冲,面评脏了大不了等三四个月就淡了,而且等到那个时候实力进步了选择还多,何必拘泥于字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务