最新华为上机考试
真题目录:点击查看目录
华为OD面试真题精选:点击立即查看
2025华为od机试2025C卷-华为OD上机考试2025年C卷
题目描述
有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗?
输入描述
第一行输入n,n表示石碑碎片的个数。
第二行依次输入石碑碎片上的文字内容s,共有n组。
输出描述
输出石碑文字的组合(按照升序排列),行末无多余空格。
用例
| 输入 | 3 a b c |
| 输出 | abc acb bac bca cab cba |
| 说明 | 无 |
| 输入 | 3 a b a |
| 输出 | aab aba baa |
| 说明 | 无 |
题目解析
全排列问题!!!
原题参考:47. 全排列 II - 力扣(LeetCode)
解体思路
解决这个问题的方法是使用深度优先搜索(DFS)遍历所有可能的组合。以下是详细的思路:
- 首先,读取输入的石碑碎片个数
n和石碑碎片上的文字内容s。 - 将输入的石碑碎片内容存入一个列表
charArray,并对其进行排序。排序的目的是为了在遍历过程中方便地跳过重复的组合。 - 定义一个深度优先搜索函数
dfs,其中包含以下参数:charArray:存储石碑碎片内容的列表。depth:当前搜索的深度。path:存储已经使用过的碎片。used:记录每个碎片是否被使用过。result:存储所有可能的组合。
- 在
dfs函数中,首先检查当前搜索的深度是否等于石碑碎片的个数。如果是,则将当前组合加入结果列表result。 - 遍历
charArray中的每个碎片。对于每个碎片,检查它是否已经被使用过,以及它是否与前一个碎片相同且前一个碎片未被使用。如果满足这些条件,则跳过当前碎片。 - 将当前碎片添加到
path中,并标记它为已使用。然后递归地搜索下一个碎片。 - 在递归返回后,执行回溯操作:将当前碎片从
path

博客介绍了华为OD机试中的一道考古学家考古问题,涉及全排列的解题思路。通过深度优先搜索遍历所有可能的石碑文字组合,跳过重复组合。提供了C++、JavaScript、Java、Python和C语言的实现代码。
订阅专栏 解锁全文
1037





