题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
n = int(input()) # 读取输入,表示接下来要输入的列表的长度,但实际上这个长度信息并未在后续逻辑中使用
name = list(map(int, input().split())) # 读取一行输入,将其分割为多个部分,并将每个部分转换为整数,最后将这些整数存储在一个列表中
# 定义一个递归函数,用于生成所有可能的排列
def func(stack, output, remaining, res):
# 如果栈为空且没有剩余元素,说明已经找到了一种排列方式,将其添加到结果列表中
if not stack and not remaining:
res.append(output[:])
# 如果栈不为空,取出栈顶元素
if stack:
top = stack.pop()
# 递归调用函数,将栈顶元素添加到输出列表中,并尝试生成剩余元素的排列
func(stack, output + [top], remaining, res)
# 回溯,将栈顶元素重新放回栈中,以便尝试其他排列方式
stack.append(top)
# 如果还有剩余元素,将其添加到栈中,并尝试生成剩余元素的排列
if remaining:
func(stack + [remaining[0]], output, remaining[1:], res)
# 初始化结果列表
res = []
# 调用函数,生成所有可能的排列
func([], [], name, res)
# 对结果列表进行排序
res.sort()
# 打印所有排列
for i in res:
print(*i)


查看6道真题和解析