一道经典的面试题,求n对括号有多少种合法的组合。

抽象为2n个位置,每个位置可以有2种取值,总共有2^2n个组合,附加约束条件是要符合括号的语法,用来剪枝。
括号语法的合法性条件:
初始化左括号和右括号的剩余数量为n,在给2n个位置赋值的过程中,需要保持剩余的'('小于等于剩余的')'

遍历的过程中,每个位置先尝试左括号,再尝试右括号 。

//l表示剩余的左括号数量,r表示剩余的右括号数量,第三个参数记录合法的括号组合数 void findParens(int l, int r, int& validCnt)
{
    if(l > r){return;} //剩余的左括号大于了右括号,非法case
    if(l == ){ //剩余的左括号肯定先被减少到0,剩余全是右括号
        validCnt++;
        return;
    }     findParens(l-,r,validCnt); //将当前位置赋值为左括号
    findParens(l, r-,validCnt);//将当前位置赋值为右括号
}
void testGenerateParens()
{
    int pair=;
    int validCnt=;
    findParens(pair,pair,validCnt);
    printf("%d\n",validCnt);

求n对括号的合法组合的更多相关文章

  1. 判断括号字符串是否为合法+求n对括号的所有组合

    n对括号的有效组合数 参考:https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0 import java.util.Ar ...

  2. N对括号的合法组合

    递归实现,需要注意以下几点: 1. 递归终止条件 2. 递归递推关系式 这里实际上是一个排列问题,只是排列需要满足条件在每一次递归调用时左括号数不能少于右括号数. 还有一点需要特别注意,当推出递归调用 ...

  3. 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))

    描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...

  4. 经典问题——输出n对括号的所有组合

    问题 n对括号有多少种合法的组合,比如两对括号可以有两种:()()和(()) 思路 问题等价为:在一个字符串中包含两种字符:'('和')',他们出现的次数都为n,并且任何时候'('出现的次数总是大于或 ...

  5. [leetcode/lintcode 题解] Google面试题:合法组合

    给一个单词s,和一个字符串集合str.这个单词每次去掉一个字母,直到剩下最后一个字母.求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中.例如单词是’abc’,字符串集合是{‘a’,’ab ...

  6. 经典问题--php/go输出n对括号的所有组合

    问题 n对括号有多少种合法的组合,写出一个可以执行出该结果的函数: 当n=1时,输出["()"]; 当n=2时,输出["(())","()()&quo ...

  7. LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)

    题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description   Problem :已知字符串s,求出其 ...

  8. Leetcode22. Generate Parentheses(生成有效的括号组合)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74937307冷血之心的博客) 题目如下:

  9. 面试编程题拾遗(06) --- 打印n对括号的全部有效组合

    如题所述,当n=3时,可能的组合有:(()()), ((())), ()(()), (())(), ()()() 代码如下(有注释): import java.util.ArrayList; impo ...

随机推荐

  1. 使用maven时报错Dynamic Web Module 3.1 requires Java 1.7 or newe

    解决方法:        1. 在eclipse 构建 web中关于java版本有三处需要修改统一.            (1)在 Java Build Path的libraries中修改      ...

  2. 清除微信浏览器网址的缓存,cookie

    清理微信浏览网站的缓存,Cookie http://blog.csdn.net/cui55/article/details/53939462 怎么清除IOS微信浏览器中的cookie? 退出微信重新登 ...

  3. 用 LoadLibraryExW 函数测试加载 dll (CSharp、Windows)

    效果如下: $ llbtest "E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64" LoadLibraryExW PATH: ...

  4. LeetCode OJ:Combination Sum II (组合之和 II)

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  5. dojo学习教程

    Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件.DojoX 就是在这样的开发社 ...

  6. Intellij IDEA基于Springboot的远程调试

    简介 本篇博客介绍一下在Intellij IDEA下对Springboot类型的项目的远程调试功能.所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须 ...

  7. 行为驱动开发BDD概要

    BDD脱胎于TDD 行为驱动开发(Behavior-Driven Development,简称BDD),是在测试驱动开发(Test-Driven Development,TDD)基础上发展而来的一种软 ...

  8. Python 多版本共存之pyenv

    经常遇到这样的情况: 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性: 系统自带的 Python 是 2.x,自己需要 Python 3.x: 此时需要在系统中安装 ...

  9. 时间由yyyy-MM-dd HH:mm:ss专为yyyy-MM-dd

    (1)类用date 注意:如果用string会报错  页面无法使用string(...): (2)数据库表 (3)页面

  10. 【转载】Python正则表达式指南

    本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html#!comments 1. 正则表达式基础 1.1. 简单介绍 正则表达 ...