括号的全部有效组合

输入n,打印n对括号中的全部有效组合。(即左右括号正确的配对)。

分析:水题,直接切。

 1 /*
 2 ID: y1197771
 3 PROG: test
 4 LANG: C++
 5 */
 6 #include<bits/stdc++.h>
 7 #define pb push_back
 8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
 9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
10 typedef long long ll;
11 using namespace std;
12 typedef pair<int, int> pii;
13 const int maxn = 1e3 + 10;
14 void dfs(int left, int right, string cur) {
15     if(left == 0 && right == 0) {
16         cout << cur << endl;
17         return;
18     }
19     if(left > 0) {
20         dfs(left - 1, right + 1, cur + "(");
21     }
22     if(right > 0) {
23         dfs(left, right - 1, cur + ")");
24     }
25 }
26 void solve() {
27     int n;
28     while(cin >> n) {
29         dfs(n, 0, "");
30     }
31 }
32 int main() {
33     //freopen("test.in", "r", stdin);
34     //freopen("test.out", "w", stdout);
35     solve();
36     return 0;
37 }
时间: 2024-10-25 14:52:36

括号的全部有效组合的相关文章

9.9递归和动态规划(六)——打印n对括号的所有有效组合(即左右括号正确配对)

/** * 功能:打印n对括号的所有有效组合(即左右括号正确配对). */ 两种方法: 方法一: /** * 思路:在括号的最前面或者原有的每对括号中面插入一对括号. 至于其它任何位置.比方字符串的末尾,都会跟之前的情况反复. * 注意:将字符串放进结果列表之前.必须检查列表有无反复. * @param remaining * @return */ public static HashSet<String> generateParens(int remaining){ HashSet<S

编程之美2016初赛第四题 求n对括号的所有有效组合

思路:递归遍历,先遍历左括号再遍历右括号,在左括号遍历次数小于右括号时,遍历右括号 n对括号的有效组合数 参考:https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0 import java.util.*; //求n对括号的所有有效组合 public class Level0004 { public static String[] Puzzle(int n) { List<String> l = new ArrayL

9.9递归和动态规划(六)——打印n对括号的全部有效组合(即左右括号正确配对)

/** * 功能:打印n对括号的全部有效组合(即左右括号正确配对). */ 两种方法: 方法一: /** * 思路:在括号的最前面或者原有的每对括号里面插入一对括号.至于其他任意位置,比如字符串的末尾,都会跟之前的情况重复. * 注意:将字符串放进结果列表之前,必须检查列表有无重复. * @param remaining * @return */ public static HashSet<String> generateParens(int remaining){ HashSet<St

实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)

public static Set<String> generateParens(int remaining) { Set<String> set=new HashSet<String>(); if(remaining == 0) set.add(""); else { Set<String> prev=generateParens(remaining-1); for(String str:prev) { for(int i=0;i<

华为OJ训练 之 括号配对数目问题

题目如下 括号配对问题 输入n个括号,输出能组合的n个括号组合,例如-- 输入1时,只有()一种: 输入2时,有()()和(())两种: 输入3时,有()()(),()(()),(())(),(()())和((())),共5种. 输入4时有14种..依次类推. 我想到的笨方法,类推找规律,因为我相信这个肯定有个公式的.找了好一会.没总结出来,于是翻书,因为印象中看过类似的题. 然后找到了公式.哈哈. import java.util.Scanner; public class Main { pu

Shell 函数、数组与正则表达式

防伪码:白日依山尽,黄河入海流. 5.1  函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a function." } func # bash test.sh This is a function. Shell 函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. 示例 2:函数返回值 #!/bin/bash func() { VAR=$((1+1)) return $VAR

【LeetCode】22. Generate Parentheses (I thought I know Python...)

I thought I know Python... Actually , I know nothing... 这个题真想让人背下来啊,每一句都很帅!!! Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: [ "((()))", "

也谈卡塔兰数

引例一:2n个人排队买票,其中n个人持50元,n个人持100元.每张票50元,且一人只买一张票.初始时售票处没有零钱找零.请问这2n个人一共有多少种排队顺序,不至于使售票处找不开钱? 引例二:括号匹配,n个左括号,n个右括号,求合法组合数目. 引例三:1表示进栈,0表示出栈.n个0,n个1的合法排列. 引例四:对于一个无限大的栈,一共n个元素,请问有几种合法的入栈出栈形式? 引例五:P = a1 * a2 * a3 * ... * an,其中ai是矩阵.根据乘法结合律,不改变矩阵的相互顺序,只用

字符串算法

字符串算法 字符串字符判重算法 字符串反转算法 字符串左旋算法 字符串右旋算法 字符串旋转匹配算法 字符串包含算法 字符串删除算法 字符串原地替换算法 字符串压缩算法 字符串变位词检测算法 字符串转整数算法 字符串全排列算法 字符串字典序组合算法 字符串的(括号)生成算法 字符串字符判重算法 给定字符串,确定是否字符串中的所有字符全都是不同的.假设字符集是 ASCII. 1 using System; 2 using System.Collections.Generic; 3 4 namespa