剑指 Offer 60. n个骰子的点数 发表于 2022-05-15 123456789101112131415161718192021222324class Solution { public double[] dicesProbability(int n) { // 定义 dp[i][j] 为 i 个骰子时点数之和为 j 时的概率 double[][] dp = new double[n + 1][6 * n + 1]; dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = dp[1][5] = dp[1][6] = 1.0 / 6; for (int i = 2; i <= n; i++) { // 注意 j 的取值范围为 [i, 6 * i] for (int j = i; j <= 6 * i; j++) { for (int k = 1; k <= 6; k++) { if (j - k > 0) { dp[i][j] += dp[i - 1][j - k] * 1 / 6; // 上一个骰子点数为 j - k 时贡献的概率 } } } } double[] res = new double[6 * n - n + 1]; for (int i = n; i <= 6 * n; i++) { res[i - n] = dp[n][i]; } return res; }} Reference剑指 Offer 60. n个骰子的点数