题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
Key
- 回溯
- 索引每到一个序号时都有进栈和出栈两种情况:进栈时tmp_a添加,tmp_b不变;出栈时tmp_a出栈,添加到tmp_b中
- 每到栈内剩余情况的用tmp_a表示,出栈情况用tmp_b表示,当索引到最后一个进栈火车后,dfs结束,tmp_b+tmp_a倒序未最终的出栈情况
import sys
import heapq
N = int(sys.stdin.readline().strip())
nums = list(map(int, sys.stdin.readline().split()))
result = []
def dfs(nums, tmp_a, tmp_b, i, result):
if i == N:
result.append(tmp_b + tmp_a[::-1])
return
tmp_a.append(nums[i])
dfs(nums, tmp_a, tmp_b, i + 1, result) # 进栈
tmp_a.pop()
if tmp_a:
tmp_ = tmp_a.pop()
tmp_b.append(tmp_)
dfs(nums, tmp_a, tmp_b, i, result) # 出栈
tmp_b.pop()
tmp_a.append(tmp_)
dfs(nums, [], [], 0, result)
result.sort() # 能够进行字典排序
for res in result:
res = map(str, res)
print(' '.join(res))
查看21道真题和解析
海康威视公司氛围 981人发布