括号生成问题
作者:互联网
题目就是给你n=3 然后你就要生成3对括号的有效形式。例如()()()和(()())这种
思路,肯定是递归了。递归每次增加一个左括号一个右括号,就会成为)(()(),所以还要加限制。
这种题,先递归出来,结果多了再用限制去做减法:
n = 3 opt = [] def khsc(ipt): if len(ipt) == n*2: opt.append(ipt) return khsc(ipt+'(') khsc(ipt+')') return khsc("") print(opt)
这肯定有手就行把,不难。然后得加限制,就是说你左右括号数量要一致,而且你每次生成到第i位的时候,你的左括号数量智能小于等于n(否则数量不对了),右括号无时无刻都不能大于左括号数量。
搞。加两个参数来记录当前左右括号数量。
n = 3 opt = [] def khsc(ipt,left,right): if left>n or right > left: return if len(ipt) == n*2: opt.append(ipt) return khsc(ipt+'(',left+1,right) khsc(ipt+')',left,right+1) return khsc("",0,0) print(opt)
拆解问题就不难了。
标签:opt,return,生成,问题,括号,ipt,left,khsc 来源: https://www.cnblogs.com/snailbuster/p/15038071.html