• Leecode no.22 括号生成


    package leecode;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Stack;

    /**
    * 22. 括号生成
    *
    * 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
    *
    * 有效括号组合需满足:左括号必须以正确的顺序闭合。
    *
    * @author Tang
    * @date 2021/9/22
    */
    public class GenerateParenthesis {

    List<String> resultList = new ArrayList<>();

    int num;

    /**
    * 二叉树
    * 前序遍历 根左右
    *
    *
    * @param n
    * @return
    */
    public List<String> generateParenthesis(int n) {
    num = n;
    //括号总个数
    generator("", "(", 0, 0);
    return resultList;
    }

    /**
    *
    * @param str 拼接的字符串
    * @param append 下次要添加的括号
    * @param left 左括号数量
    * @param right 右括号数量
    */
    private void generator(String str, String append, int left, int right) {
    String line = str;

    //保证左括号数量始终大于等于右括号数量
    if(left == right && ")".equals(append)) {
    return;
    }

    if("(".equals(append)) {
    left++;
    }else {
    right++;
    }

    line += append;

    //凑齐括号 召唤神龙
    if(left + right == num * 2) {
    resultList.add(line);
    return;
    }

    if(left < num) {
    generator(line, "(", left, right);
    }

    if(right < num) {
    generator(line, ")", left, right);
    }

    }



    public static void main(String[] args) {
    System.out.println(new GenerateParenthesis().generateParenthesis(3));
    }
    }
  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/ttaall/p/15319806.html
Copyright © 2020-2023  润新知