🌕 LCP 07. 传递信息

吞佛童子2022年10月10日
  • algorithm
  • dp
小于 1 分钟

🌕 LCP 07. 传递信息

难度: 🌕

问题描述

img_8.png


解法

class Solution {
    public int numWays(int n, int[][] relation, int k) {
        // 思路:
        // dp
        int[][] dp = new int[k + 1][n];
        HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
        for(int[] arr: relation) {
            int from = arr[0];
            int to = arr[1];
            if(!map.containsKey(to)) {
                map.put(to, new ArrayList<Integer>());
            }
            ArrayList<Integer> list = map.get(to);
            list.add(from);
        }
        dp[0][0] = 1;
        // 进行 k 轮
        for(int i = 1; i <= k; i ++) {
            for(int j = 0; j < n; j ++) {
                // 找到 j 的上一个节点集合
                if(!map.containsKey(j)) {
                    continue;
                }
                ArrayList<Integer> list = map.get(j);
                for(int from: list) {
                    dp[i][j] += dp[i - 1][from];
                }
            }
        }
        return dp[k][n - 1];
    }
}

输出

img_9.png

上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou