鱼C论坛

 找回密码
 立即注册
查看: 2355|回复: 3

求问各位大佬,这个代码里面left的值什么时候减小了?

[复制链接]
发表于 2022-8-21 12:55:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def generateParenthesis(n: int) -> list[str]:
    ans = []
    def backtrack(S, left, right):
        if len(S) == 2 * n:
            ans.append(''.join(S))
            return
        if left < n:
            S.append('(')
            print(S)
            print (left)
            backtrack(S, left+1, right)
            print (left)
            S.pop()
            print(S)
        if right < left:
            S.append(')')
            print(S)
            backtrack(S, left, right+1)
            S.pop()
            print(S)
    backtrack([], 0, 0)
    return ans

print(generateParenthesis(2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-21 13:22:09 | 显示全部楼层


left 没有减小,只有增大,即递归时传入 left + 1 时,此次的递归过程相比之前增大 1

代码中没有对 left 直接或间接的减小操作,因此 left 参数不可能自己减小

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 12:26:14 | 显示全部楼层
Twilight6 发表于 2022-8-21 13:22
left 没有减小,只有增大,即递归时传入 left + 1 时,此次的递归过程相比之前增大 1

代码中没有对  ...

['(']
0
['(', '(']
1
['(', '(', ')']
['(', '(', ')', ')']
['(', '(', ')']
['(', '(']
1
['(']
['(', ')']
['(', ')', '(']
1
['(', ')', '(', ')']
['(', ')', '(']
1
['(', ')']
['(']
0
[]
['(())', '()()']
这是运行出来得结果,left有 从1到0的过程,我也看着只有增大,不知道后面怎么又出现0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 12:38:00 | 显示全部楼层


这是递归,不同时刻的递归过程,你传入的 left 值不同,打印出来的自然也不同,两次打印的 left 不是同一个 left

backtrack([], 0, 0) --> if left < n  --> print(left) 此时输出 0 之后进入递归 --> 而 backtrack([], left + 1, right) 即 backtrack([], 0 + 1, 0)

backtrack([], 1, 0) -->  if left < n  --> print(left) 此时输出 1 之后进入递归 --> 而 backtrack([], left + 1, right) 即 backtrack([], 1 + 1, 0)

后续递归返回同理,输出:

1

0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表