递归+栈 | HJ77 火车进站

# 最优解
res = []
def dfs(wait, stack, out):
    if not wait and not stack:
        res.append(' '.join(map(str, out)))
    if wait: # 入栈
        dfs(wait[1:], stack + [wait[0]], out)
    if stack: # 出栈
        dfs(wait, stack[:-1], out + [stack[-1]])
while True:
    try:
        n, nums = int(input()), list(map(int, input().split()))
        dfs(nums, [], [])
        for i in sorted(res):
            print(i)
    except:
        break



思路:有两个状态(出栈和不出栈)且随深度遍历不同选择,符合递归类型。先写出出栈和不出栈的递归代码,递归结束条件不确定时,可以调试时观察什么情况下需要记录遍历路径结果。

递归函数的参数如何确定?本题随着递归深度变化,1. 需要一个记录入站火车情况的栈变量;2. 出栈路径记录值会变化,每获取一个有效结果值就加入到全局变量res中;3. 还需要标志剩余待进栈火车的记录值

用时:2h

#栈##递归#
华为笔试刷题 文章被收录于专栏

高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务