let f(k) be the set of all possible valid arrangement of k pairs of (),
for example,
f(0) = { "" }, "" means empty string
f(1) = { () }
f(2) = { ()(), (()) }
Dynamic programming
迭代:
f(0)={""}
f(k) = ( f(0) ) * f(k-1) + ( f(1) ) * f(k-1) + ... + ( f(k-1) )
所以,
f(1) = ( f(0) ) * f(0) = () => { () }
f(2) = ( f(0) )*f(1) + ( f(1) ) * f(0) = ( ) * { () } + ( { () } )
= ()() + (()) => { ()(), (()) }
f(3) = ( f(0) ) * f(2) + ( f(1) ) *f(1) + ( f(2) )*f(0)
= ()*{ ()(), (()) } + (()) () + ( { ()(), (()) } )
=()()() + ()(()) + (()) () + (()()) + ( (()) )
= { ()()() , ()(()), (()) () , (()()) , ( (()) ) }
.....
.....