注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
这道题解题思路已经明白了,但有人可以帮忙解释一下递归过程么?
code如下
- class Solution(object):
- def func(self, ans, strs, left, right, nmax):
- print("start new func: ", left, right, strs, nmax, ans)
- if(left < nmax):
- self.func(ans, strs + '(', left + 1, right, nmax)
- if(right < left):
- self.func(ans, strs + ')', left, right + 1, nmax)
- if(len(strs) == 2 * nmax):
- ans.append(strs)
- return
-
- def generateParenthesis(self, n):
- """
- :type n: int
- :rtype: List[str]
- """
- ans = []
- self.func(ans, "", 0, 0, n)
- print("main + ", ans)
- return ans
复制代码
print出来的递归过程:
- ('start new func: ', 0, 0, '', 3, [])
- ('start new func: ', 1, 0, '(', 3, [])
- ('start new func: ', 2, 0, '((', 3, [])
- ('start new func: ', 3, 0, '(((', 3, [])
- ('start new func: ', 3, 1, '((()', 3, [])
- ('start new func: ', 3, 2, '((())', 3, [])
- ('start new func: ', 3, 3, '((()))', 3, [])
- ('start new func: ', 2, 1, '(()', 3, ['((()))'])
- ('start new func: ', 3, 1, '(()(', 3, ['((()))'])
- ('start new func: ', 3, 2, '(()()', 3, ['((()))'])
- ('start new func: ', 3, 3, '(()())', 3, ['((()))'])
- ('start new func: ', 2, 2, '(())', 3, ['((()))', '(()())'])
- ('start new func: ', 3, 2, '(())(', 3, ['((()))', '(()())'])
- ('start new func: ', 3, 3, '(())()', 3, ['((()))', '(()())'])
- ('start new func: ', 1, 1, '()', 3, ['((()))', '(()())', '(())()'])
- ('start new func: ', 2, 1, '()(', 3, ['((()))', '(()())', '(())()'])
- ('start new func: ', 3, 1, '()((', 3, ['((()))', '(()())', '(())()'])
- ('start new func: ', 3, 2, '()(()', 3, ['((()))', '(()())', '(())()'])
- ('start new func: ', 3, 3, '()(())', 3, ['((()))', '(()())', '(())()'])
- ('start new func: ', 2, 2, '()()', 3, ['((()))', '(()())', '(())()', '()(())'])
- ('start new func: ', 3, 2, '()()(', 3, ['((()))', '(()())', '(())()', '()(())'])
- ('start new func: ', 3, 3, '()()()', 3, ['((()))', '(()())', '(())()', '()(())'])
- ('main + ', ['((()))', '(()())', '(())()', '()(())', '()()()'])
- ["((()))", "(()())", "(())()", "()(())", "()()()"]
复制代码
这里- ('start new func: ', 3, 3, '((()))', 3, [])
- ('start new func: ', 2, 1, '(()', 3, ['((()))'])
复制代码
为什么可以从(3,3)直接返回到(2,1),函数具体是如何进行返回的呢?先谢谢各路大神了。。。 |