public class Solution { public ListgenerateParenthesis(int n) { ArrayList res = new ArrayList (); if ( n < 0 ) { return res; } helper( n,n, new String(), res ); return res; } private void helper( int l, int r, String item, ArrayList res ) { // Base case // remaining r should be greater or equal to l if ( r < l ) { return; } // when consuming all l and r, return current combination if ( l == 0 && r == 0 ) { res.add(item); } if ( l > 0 ) { helper( l-1, r, item+"(", res); } if ( r > 0 ) { helper(l, r-1, item+")", res); } } }
Wednesday, July 8, 2015
[Leetcode] 07/06 [String] Generate Parentheses
Recursive
Time:O(); Space:O()
Logic:
==> (( => (( ) => (( ))
( L2 R0 L2 R1 L2 R2
L1 R0
==> ( ) => ( ) ( => ( ) ( )
L1 R1 L2 R1 L2 R2
NOTE:
C_0 =1, C_1 = 1, C_2 =2 ,C_3 = 5, C_4 = 14
C_0 =1, C_n+1 = [i=0~n]signma(C_i*C_n-i), for n >= 0
C3 = C_0*C2 + C_1*C_1 + C_2*C_0 = 2 + 1 + 2 = 5
C_n+1 = ( 2(2*n+1) / n+2 )* C_n
the Catalan numbers form a sequence of natural numbers that occur in various counting problems, often involving recursively-defined objects.
Re-interpreting the symbol X as an open parenthesis and Y as a close parenthesis, Cn counts the number of expressions containing n pairs of parentheses which are correctly matched:
C_0 = 1 \quad \mbox{and} \quad C_{n+1}=\sum_{i=0}^{n}C_i\,C_{n-i}\quad\text{for }n\ge 0;
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment