【华为机试】2023年真题B卷(python)-考古问题
2024-01-03 13:31:45
一、题目
题目描述:
考古问题,假设以前的石碑被打碎成了很多块,每块上面都有一个或若干个字符,请你写个程序来把之前石碑上文字可能的组合全部写出来,按升序进行排列。
二、输入输出
三、示例
示例1:
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
3
a b c
输出
abc
acb
bac
bca
cab
cba
示例2:输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
a b a
输出
aab
aba
baa
四、要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
五、解题思路
排列组合问题,简单的 DFS?
六、参考代码?
# -*- coding: utf-8 -*-
'''
@File : 2023-B-考古问题.py
@Time : 2023/12/30 22:51:00
@Author : mgc
@Version : 1.0
@Desc : None
'''
# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict
def permutations(prefix, remaining, result):
"""
生成所有可能的排列组合
Args:
prefix (str): 当前生成的排列组合的前缀
remaining (list): 剩余的字符列表
result (list): 存储生成的排列组合的结果列表
"""
for i in range(len(remaining)):
str_i = prefix + remaining[i]
remaining_i = remaining[:i] + remaining[i+1:]
if not remaining_i:
if str_i not in result:
result.append(str_i)
else:
permutations(str_i, remaining_i, result)
result = []
num = int(input()) # 输入字符块数量
list_n = input().split(' ') # 输入字符块列表
permutations('', list_n, result) # 生成排列组合
result.sort() # 对结果进行排序
for s in result:
print(s) # 输出结果
文章来源:https://blog.csdn.net/u014481728/article/details/135310895
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!