最新华为OD机试
题目描述
一个文件目录的数据格式为:目录id,本目录中文件大小,(子目录id列表)。
其中目录id全局唯一,取值范围[1, 200],本目录中文件大小范围[1, 1000],子目录id列表个数[0,10]例如 : 1 20 (2,3) 表示目录1中文件总大小是20,有两个子目录,id分别是2和3
现在输入一个文件系统中所有目录信息,以及待查询的目录 id ,返回这个目录和及该目录所有子目录的大小之和。
输入描述
第一行为两个数字M,N,分别表示目录的个数和待查询的目录id,
- 1 ≤ M ≤ 100
- 1 ≤ N ≤ 200
接下来M行,每行为1个目录的数据:
目录id 本目录中文件大小 (子目录id列表)
子目录列表中的子目录id以逗号分隔。
输出描述
待查询目录及其子目录的大小之和
示例1
输入
3 1
3 15 ()
1 20 (2)
2 10 (3)
输出
45
说明
目录1大小为20,包含一个子目录2 (大小为10),子目录2包含一个子目录3(大小为15),总的大小为20+10+15=45
示例2
输入
4 2
4 20 ()
5 30 ()
2 10 (4,5)
1 40 ()
输出
60
说明
目录2包含2个子目录4和5,总的大小为10+20+30 = 60
解题思路
数据存储
:我们需要两个数据结构:
-
目录大小映射:存储每个目录的文件大小。
-
子目录映射:存储每个目录的子目录列表。
DFS遍历
:从查询目录ID开始,使用深度优先遍历(DFS)方式,计算该目录及其所有子目录的大小。
-
初始时,将目标目录ID放入栈中。
-
依次弹出栈中的目录ID,累加当前目录的文件大小。
-
将当前目录的所有子目录压入栈中,继续遍历。
-
直到栈为空,遍历结束。
-
终止条件:当遍历所有目录之后,返回累计的大小总和。