文件目录大小

题目描述

一个文件目录的数据格式为:目录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以逗号分隔。

输出描述

待查询目录及其子目录的大小之和

import java.util.*

public class Main {

    public static void main() {
        Scanner sc = new Scanner(System.in);
        String mn = sc.nextLine();
        String[] mns = mn.split();
        int m = Integer.valueOf(mns[0]);
        int n = Integer.valueOf(mns[1]);    //解析第一行数据M、N

        Map<Integer, Integer> idValueMap = new HashMap<>();
        Map<Integer, int[]> idChildrenMap = new HashMap<>();

        while(sc.hasNexLine()) {
            String input = sc.nexLine();
            String[] inputs = input.split();
            int id = Integer.valueOf(inputs[0]);
            int size = Integer.valueOf(inputs[1]);
            idValueMap.put(id, size);
            String[] tmp = inputs[2].substring(0, inputs[2].length()-2).split(",");
            int[] childrens = new int[tmp.length];
            for(int i = 0; i < tmp.length; i++) {
                childrens[i] = Integer.valueOf(tmp[i]);
            }
            idChildrenMap.put(id, childrens);
        }

        Stack<Integer> stack = new Stack<>();

        stack.push(n);

        int size;

        while(!stack.isEmpty()) {
            size += idValueMap.get(stack.pop());
            int[] childrens = idChildreMap.get(stack.pop());
            for(int i=0; i < childrens.length; i++) {
                stack.push(childres[i]);
            }
        }

        System.out.println(size);


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值