zoukankan      html  css  js  c++  java
  • 生成括号 .

    生成括号

    给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

    样例

    给定 n = 3, 可生成的组合如下:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    嗯。。想了半天。

    其实可以当作一个先序遍历二叉树的问题。

    根节点是'(',左孩子都是'(',右孩子都是')',然后递归先序遍历。i,j分别是'(',')'剩余的数量,如果序列合法,则必然i<=j。p是遍历方向,

    0向左,1向右。若i>0则允许向左,i<j && j>0则允许向右。感觉代码写的有些乱。

     1 public class Solution {
     2     /**
     3      * @param n n pairs
     4      * @return All combinations of well-formed parentheses
     5      */
     6     public ArrayList<String> generateParenthesis(int n) {
     7         ArrayList<String> ss = new ArrayList<String>();
     8         ss = print(n,n,ss,0);
     9         return ss;
    10     }
    11     
    12     ArrayList<String> print(int i,int j,ArrayList<String> ss,int p){
    13         if(ss.size() == 0) {
    14             String s = "(";
    15             ss.add(s);
    16             i--;
    17         }else {
    18             ArrayList<String> list = new ArrayList();
    19             if(p == 0) {
    20                 for(String s:ss){
    21                     String s1 =s + "(";
    22                     list.add(s1);
    23                 }
    24                 i--;
    25             }else {
    26                 for(String s:ss){
    27                     String s1 =s + ")";
    28                     list.add(s1);
    29                 }
    30                 j--;
    31             }
    32             ss = list;
    33         }
    34         
    35         ArrayList<String> list = new ArrayList();
    36         if(i > 0) {
    37             list.addAll(print(i,j,ss,0));
    38         }
    39         if(i < j && j > 0) {
    40             list.addAll(print(i,j,ss,1));
    41         }
    42         if(list.size() == 0)return ss;
    43         return list;
    44     }
    45 }
    View Code
  • 相关阅读:
    P2009 跑步
    P3916 图的遍历
    P2865 [USACO06NOV]路障Roadblocks
    P2820 局域网
    P2176 [USACO14FEB]路障Roadblock
    讨伐!数论
    网络流入门——EK算法
    最被低估的特质
    我的天哪我有博客了!
    Area POJ
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5020184.html
Copyright © 2011-2022 走看看