来个简单易懂的python版, n1是剩余左括号, n1_是剩余右括号
res = []
def gen(sol, stk, n1, n2, n3, n1_, n2_, n3_):
if n1 == 0 and n2 == 0 and n3 == 0 and n1_ == 0 and n2_ == 0 and n3_ ==
0:
res.append("".join(sol))
return
if n1 > 0:
gen(sol[:] + ["("], stk[:] + [1], n1-1, n2, n3, n1_, n2_, n3_)
if n2 > 0:
gen(sol[:] + ["["], stk[:] + [2], n1, n2-1, n3, n1_, n2_, n3_)
if n3 > 0:
gen(sol[:] + ["{"], stk[:] + [3], n1, n2, n3-1, n1_, n2_, n3_)
if len(stk) > 0 and stk[-1] == 1:
gen(sol[:] + [")"], stk[:-1], n1, n2, n3, n1_-1, n2_, n3_)
if len(stk) > 0 and stk[-1] == 2:
gen(sol[:] + ["]"], stk[:-1], n1, n2, n3, n1_, n2_-1, n3_)
if len(stk) > 0 and stk[-1] == 3:
gen(sol[:] + ["}"], stk[:-1], n1, n2, n3, n1_, n2_, n3_-1)
gen([], [], 2, 2, 1, 2, 2, 1)
for i in res:
print i