剑指 Offer 60. n个骰子的点数
动态规划:已知n-1个骰子的所有情况,再增加一个骰子,可推出n个骰子的所有情况。增加的一个骰子的点数只有1-6种可能,与n-1个骰子对应点数相乘,可得到n个骰子点数的一种情况,遍历所有情况即可。
class Solution {public double[] dicesProbability(int n) {double[][] dp = new double[n + 1][6 * n + 1];for(int i = 1; i <= 6; i++){dp[1][i] = 1.0 / 6;}for(int i = 2; i <= n; i++){ // 遍历骰子个数for(int j = i; j <= 6 * i; j++){ // 骰子个数确定时,遍历所有点数可能的情况for(int k = 1; k <= 6; k++){ // 新增的一个骰子点数有1-6种可能的情况if(j - k > 0) dp[i][j] += dp[i - 1][j - k] / 6.0;}}}double[] res = new double[5 * n + 1];for(int i = 0; i < res.length; i++) res[i] = dp[n][i + n];return res;}
}