生成n对括号的合法全排列

 1 import java.util.Scanner;
 2 import java.util.Stack
 3 public class Main {
 4     public static void main(String []args){
 5         Scanner sc =new Scanner(System.in);
 6         while(sc.hasNext()){
 7             int m =sc.nextInt();
 8             Stack<String> s  =new Stack<String>();
 9             String n ="";
10             generate(m , m, n);
11         }
12     }
13     public static void generate(int leftNum,int rightNum,String s)
14     {
15         if(leftNum==0&&rightNum==0)
16         {
17             System.out.println(s);
18         }
19         if(leftNum>0)
20         {
21             generate(leftNum-1,rightNum,s+‘(‘);
22         }
23         if(rightNum>0&&leftNum<rightNum)
24         {
25             generate(leftNum,rightNum-1,s+‘)‘);
26         }
27     }
28 }
时间: 2024-10-14 18:25:58

生成n对括号的合法全排列的相关文章

7.2.1 生成1~n的排列(全排列)【STL__next_permutation()_的应用】

#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int a[20]; void print_permutation(int n, int a[], int

输出括号所有合法匹配

原文链接:http://blog.csdn.net/doc_sgl/article/details/8917476 简答题最后一题,编程实现所有括号的合法匹配 如输入3 输出:"((()))”, “(()())”, “(())()”, “()(())”, “()()()” 思路:深搜+剪枝,关键在于记录已经用掉的左括号个数和右括号的个数, 1,当用过的左括号个数小于右括号则非法: 2,当二者个数和大于2N则非法: 3,当二者个数相等且数目等于2N此时输出. #include <iostre

22. Generate Parentheses生成指定个括号

生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边) 思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号 有点像二叉树的建立过程 /* 思路是从第一个符号开始添加,只有两种情况,一种是添加左括号,一种是添加右括号 判断好两种添加的条件后向后添加就行: 1.当左边括号不超过括号数n时可以添加左括号 2.当右括号不超过左括号时可以添加右括号 用递归依次向下添加就行 由于这种数据结构比较像二叉树,代码使用二叉树写的

回溯法输出n对括号的合法组合

排列组合这种问题似乎用回溯法比较合适,括号只有左括号和或右扣号,把左扣号定好了,右括号也就定好了. 用一个栈来存中间结果,优先放左扣号,符合条件输出后回溯. #include <stdio.h> int main(int argc, char *argv[]) { int n = atoi(argv[1]); char s[10000]; int si = -1; //未放入栈的左括号数 int left_count = n; int i = 0; while (1) { if (left_c

python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)

斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波那契数列元素 调用上述函数,完成如下功能: 用户输入一个整数n,输出所有不超过n的斐波那契数列元素.输出数列的元素和及平均数,输出按照顺序,用英文逗号和空格分割 此题目为自动评阅,请严格按照要求规范输入和输出. def jebona(n): if n==0: return 0 elif n == 1

生成括号

生成括号 给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果. 样例 给定 n = 3, 可生成的组合如下: "((()))", "(()())", "(())()", "()(())", "()()()" 嗯..想了半天. 其实可以当作一个先序遍历二叉树的问题. 根节点是'(',左孩子都是'(',右孩子都是')',然后递归先序遍历.i,j分别是'(',')'剩余的数量,如果序列合法,

LintCode刷题——生成括号

427-生成括号 题目:给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果. 样例:给定 n = 3, 可生成的组合如下:"((()))", "(()())", "(())()", "()(())", "()()()" 算法:对于给定的n,定义一个result字符串,当字符串中的'('的数目大于')'的数目,则该字符串中可以拼接'('或')': 否则,result中只能拼接'('.递归

lintcode: 生成括号

生成括号 给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果. 样例 给定 n = 3, 可生成的组合如下: "((()))", "(()())", "(())()", "()(())", "()()()" 解题 参考链接 采用递归树的思想,当左括号数大于右括号数时可以加左或者右括号,否则只能加左括号,当左括号数达到n时,剩下全部添加右括号 public class Solution

LeetCode22 Generate Parentheses 括号生成

题目: 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: "((()))", "(()())", "(())()", "()(())", "()()()" 翻译: