剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数

题目

链接

https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/

问题描述

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。

1 <= n <= 11

示例

提示

1 <= n <= 11

思路

动态规划。第一枚骰子的点数是1-6,概率都是六分之一。

第二枚骰子投出后,和为7的概率是1+6,2+5,3+4,4+3,5+2,6+1,这些情况。、

概率应该为二者乘积的和,同理可以往下推论。

复杂度分析

时间复杂度 O(n2)
空间复杂度 O(n)

代码

Java

    public double[] dicesProbability(int n) {
        double[] dp = new double[6];
        Arrays.fill(dp, 1.0 / 6.0);
        for (int i = 2; i <= n; i++) {
            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;
    }
posted @   cheng102e  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2020-03-19 LeetCode 409. Longest Palindrome
点击右上角即可分享
微信分享提示