zoukankan      html  css  js  c++  java
  • 【转】面试题:N对括号的合法状态

    原文地址:http://www.ahathinking.com/archives/186.html

    给定N对括号,输出其所有的合法的组合状态,例如,N=3,所有的合法状态为:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”

    思路:还是深搜DFS的思路,深搜的过程关键在于记录已经用掉的左括号个数和右括号的个数,当用过的左括号个数小于右括号则非法;当二者个数和大于2N则非法;当二者个数相等且数目等于2N则为合法。

    代码如下:

    #include<iostream>
    using namespace std;
    
    #define PAIR 50
    
    char str[PAIR * 2 + 1]; // 设括号对数不超过50, str记录括号组合状态
    
    void DFS_bracket(int n, int left_used, int right_used)
    {
        if(left_used == right_used && left_used + right_used == 2 * n)
        {
            printf("%s
    ", str);
            return;
        }
        if(left_used < right_used || left_used + right_used >= 2 * n)
        {
            return ;
        }
        int index = left_used + right_used;
        str[index] = '(';
        DFS_bracket(n, left_used + 1, right_used);
    
        str[index] = ')';
        DFS_bracket(n, left_used, right_used + 1);
    }
    
    void main()
    {
        int N;
        scanf("%d", &N);
        DFS_bracket(N, 0, 0);
    }
  • 相关阅读:
    CDH6.2安装之离线方式
    impala
    Oracle
    性能调优之Mapping
    Informatica
    性能瓶颈之System
    性能瓶颈之Session
    本地Oracle客户端11g升级12c导致PowerCenter无法连接ODBC数据源
    性能瓶颈之Mapping
    性能瓶颈之Source
  • 原文地址:https://www.cnblogs.com/xmuliushuo/p/3349376.html
Copyright © 2011-2022 走看看