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

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

  给定一整数N,输出N对括号的合法全排列

例:

  2

  3

  ()()

  (())

  

  ()()()

  (())()

  ()(())

  ((()))

分析:

  很经典的需要迭代来进行实现。

  迭代的关键在于找到跳出迭代的条件,以及每次迭代的策略。

  出口:

    此题,迭代,每次只能画括号的一半,故而出口为,左边括号剩余和右边括号剩余均为0;

  每次迭代策略:

    如代码所示。

代码实现:

 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 }
Java Code

 

posted @ 2016-09-29 21:03  zdtiio  阅读(1099)  评论(0编辑  收藏  举报