zoukankan      html  css  js  c++  java
  • 【每日一题-leetcode】22.括号生成

    22.括号生成

    1. 括号生成

    难度中等969

    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

    示例:

    输入:n = 3
    输出:[
           "((()))",
           "(()())",
           "(())()",
           "()(())",
           "()()()"
         ]
    

    时间:O(2^n)

    思路:如果递归生成括号,会出现很多无效的括号,因此 在递归的过程中过滤掉一些不符合条件的括号。规律就是 生成n 也就是2n个括号 由于都是小括号,因此 左括号 和右括号 应该是相等的。如果left < n 继续 递归 由于一个右括号应该匹配一个左括号 当左括号 > 右括号 递归 当left 和 right == n的时候就停止 返回。

    private List<String> result;//存储结果
        
            public List<String> generateParenthesis(int n) {
                result = new ArrayList<String>();
                generate("",0,0,n);
                return result;
            }
            //在recursion中过滤掉不符合条件的括号。
            public void generate(String str,int left,int right,int n){
                //终止条件
                if(left == n && right == n){
                    result.add(str);
                    return;
                }
                if(left < n){
                    generate(str+"(",left+1,right,n);
                }
                if(left > right){
                    generate(str+")",left,right+1,n);
                }
            }
    
  • 相关阅读:
    STM32 USB应用——VCP
    基础数据类型与字节数组相互转换 BitConvter类
    C# 16进制与字符串、字节数组之间的转换
    C语言函数手册学习
    C串口通信
    C#串口通信
    C Socket通信编程
    C SOCKET编程
    C# SOCKE通信
    socket阻塞与非阻塞,同步与异步、I/O模型
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860637.html
Copyright © 2011-2022 走看看