剑指 Offer 60. n个骰子的点数
题目:
思路:
【1】如图:
复杂度分析:
代码展示:
//剑指 Offer 60. n个骰子的点数 public class Offer { public static void main(String[] args) { System.out.println(Arrays.toString(Method2(3))); } //思路一:动态规划的思路 public static double[] Method2(int n){ //一个骰子有六面,每一面的概率都是1/6 double[] dp = new double[6]; Arrays.fill(dp, 1.0 / 6.0); //因为第一个骰子的结果已经直接弄出来,所以从第二个开始计算 for (int i = 2; i <= n; i++) { //骰子的个数为n,那么最小值也就是每一面都是1即n,最大值为每一面都是6,即6n,个数为6n-n+1=5n+1 double[] tmp = new double[5 * i + 1]; //对于出现结果的计算 for (int j = 0; j < dp.length; j++) { //遍历这个骰子每一面出现的结果 for (int k = 0; k < 6; k++) { tmp[j + k] += dp[j] / 6.0; } } dp = tmp; } return dp; } }