华为8.19笔试第二题java的思路,求指点

看了题以后试了下java,求大佬指点。
除了各种边界的检查之外,大致思路是:
1.当前深度d可以摆放的node的最大值由上层node数量*2得到
2.当前深度数量为n的node的可摆放的种类可以简化为:n个苹果放入m个盘子里,每个盘子只能最多放一个苹果
3.把每层的可以摆放node的可能性相乘得到最后结果
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int nodeSize = n;
        // save <depth, number of nodes at its depth> to map
        Map<Integer, Integer> map = new HashMap<>();
        int maxDepth = Integer.MIN_VALUE;
        int mod = 1000000007;
        while (nodeSize-- != 0) {
            int node = sc.nextInt();
            maxDepth = Math.max(maxDepth, node);
            if (map.containsKey(node)) {
                map.put(node, map.get(node) + 1);
            } else {
                map.put(node, 1);
            }
        }
        if (!map.containsKey(0) || map.get(0) != 1) {
            System.out.println("0");
            return;
        }
        int d = 1;
        int result = 1;
        while (map.containsKey(d)) {
            int curr = map.get(d);
            int last = map.get(d - 1) * 2;
            if (curr > last) {
                System.out.println("0");
                return;
            }
            result = (result*combination(curr,last))%mod;
            d++;
        }
        System.out.println(result);
    }
    // m apple put into n plate, each plate can have max 1 apple
    private static int combination(int curr, int last) {
        if(curr == last || curr==0)
            return 1;
        return combination(curr-1,last-1) + combination(curr,last-1);
    }
}


#笔试题目##华为#
全部评论
C(n,2*m)
点赞
送花
回复 分享
发布于 2020-08-26 21:14

相关推荐

北京亚信运维 实习 实习工资3300 不包住
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务