剑指 Offer 60. n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 中等
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
方法:动态规划 时间复杂度O(n) 空间复杂度O(n)
在已有概率的情况下,再来一个骰子,每个概率被稀释1/6,相同数值加和,就是新的概率
dp[i] 表示i个骰子的概率集合
n个骰子能组合出 5 * n + 1个数字,dp[i - 1]中的每个概率与新加入的一个骰子结合,都会变为原来的1/6
def dicesProbability(self, n): """ :type n: int :rtype: List[float] """ dp = [float(1)/6] * 6 # float是python2的原因,默认整型除法// for i in range(2,n+1): tmp = [0] * (5*i + 1) # 这里是i,总写错成n for j in range(len(dp)): for k in range(6): tmp[j + k] += float(dp[j]) * (float(1)/6) dp = tmp return dp

浙公网安备 33010602011771号