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

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

示例 1:

输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————————
解题思路一:使用递归,要求n个骰子的点数和,可以先求n-1棵骰子的点数和,通过递归可以计算每种点数和的数量,然后存在列表中。

class Solution:def twoSum(self, n: int) -> List[float]:if n<1:return []max_sum = n*6  # n个骰子的最大点数prob = [0 for _ in range(max_sum-n+1)]  # n个骰子的所有可能点数def probablity(n1,prob):  # 计算n1个骰子的所有情况for i in range(1,7):probablities(n1,n2,i,prob)  # n1是骰子个数,n2是当前是第几个骰子,i是当前骰子值之和,prob用于存储不同点数的个数 def probablities(n1,n2,sums,prob):  # 递归函数if n2==1:  # 停止递归条件prob[sums-n1]+=1  # 对应点数位置加1,减去n1的目的是因为n1前的值不可能取到else:for i in range(1,7):probablities(n1,n2-1,sums+i,prob)probablity(n,prob)  # 获得所有点数的个数情况total = 6**n  # 一共会有多少种组合num = []  # 记录不同点数的概率for n in prob:num.append(n/total)return num

解题思路2:在下一轮循环中,我们加上一个新的骰子,此时和为n的骰子出现的次数应该等于上一轮循环中骰子点数和为n-1、n-2、n-3、n-4、n-5与n-6的次数的总和,所以我们使用另一个数组的第n个数字设为前一个数组对应的第n-1、n-2、n-3、n-4、n-5与n-6个数字之和。

其Python代码如下:

class Solution:def twoSum(self, n: int) -> List[float]:max_num = n*6  # n个骰子的最大值nums = [[0 for _ in range(max_num)] for _ in range(n)]  # 初始化骰子状态,用n个数组for i in range(0,6):  # 初始化一个骰子的状态nums[0][i] = 1for i in range(1,n):  # 从第二个骰子开始更新状态for j in range(i,(i+1)*6):  # 第i个骰子的取值范围为i到(i+1)*6for k in range(1,7):  # 取对应骰子位置的前6个值if j-k<0:  # 如果前六个值的索引小于0break  # 跳出循环nums[i][j]+=nums[i-1][j-k] total = 6**n  # 计算每种值的概率pro = []for nn in nums[n-1][n-1:]:pro.append(nn/total)return pro

leetcode —— 面试题60. n个骰子的点数相关推荐

  1. 剑指Offer - 面试题60. n个骰子的点数(动态规划)

    1. 题目 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 ...

  2. 【LeetCode】剑指 Offer 60. n个骰子的点数

    [LeetCode]剑指 Offer 60. n个骰子的点数 文章目录 [LeetCode]剑指 Offer 60. n个骰子的点数 package offer;import java.util.Ar ...

  3. 剑指 Offer 60. n个骰子的点数(动态规划)

    [剑指 Offer 60. n个骰子的点数] 思路: \qquad题目其实不难,写这篇博客主要是记录下C++使用vector开多维数组. \qquad思路类似于走台阶,每次可以走1,2,3阶,问到每一 ...

  4. java 6面骰子_《剑指offer》 面试题43 n个骰子的点数 (java)

    引言:写这篇文章的初衷只是想做个笔记,因为这道题代码量有点大,有点抽象,而书上并没有详细的注释.为了加深印象和便于下次复习,做个记录. 原题:把n个骰子扔到地上,所有骰子朝上一面的点数之后为s. 输入 ...

  5. 【面试题】n个骰子的点数(动态规划法)

    题目描述 动态规划 class Solution {public double[] twoSum(int n) {// pre[]记录前 n-1个骰子的点数概率数组,初始只有一个骰子,点数概率数组显然 ...

  6. 97. Leetcode 剑指 Offer 60. n个骰子的点数 (动态规划-背包问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp数组是一维,大小是[6*n+1], 这里要注意下,背包的容量会和物品的重量 有关系了,投掷n枚的骰子,背包的容量范围是[n,6n],用2枚想一下,出现的 ...

  7. 【LeetCode笔记】剑指 Offer 60. n个骰子的点数(Java、动态规划)

    文章目录 题目描述 代码 & 思路 1. 二维数组(方便理解) 2. 一维数组(节约空间) 二刷 鸽了好久的打题博客-要继续补起来了! 今天不打题,明天变垃圾 QAQ 题目描述 一眼就想先暴力 ...

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

    文章目录 题目地址 代码 递推公式 空间优化 运行结果通过 题目地址 力扣https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/ 代 ...

  9. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

    LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入 ...

最新文章

  1. 图像处理、语音处理的应用及前沿技术_人工智能,虚拟技术,语音识别技术在我们的生活中...
  2. linux两个网段默认网关_Linux下配置多网卡多网关
  3. js实现的tooltip简单小组件
  4. 百度地图与谷歌地图 (常识、区别,更倾向于使用百度地图,纠错信息比谷歌多)...
  5. 解题报告:hdu 1556 Color the ball(区间修改,单点查询)
  6. Docker学习笔记 - Docker容器的日志
  7. 与机器人对话的语音识别解决方案
  8. Cesium Terrain Builder 非压缩瓦片
  9. 会玩弹珠也可以拿来炫了?是的,这个技能燃爆了!
  10. Android图书馆选座系统课程设计
  11. c语言程序设计考试流程图,c语言程序设计流程图详解.pdf
  12. 用continue计算100以内奇数和_一分钟明白break和continue
  13. ISIS协议的基础配置实验,原来做ISIS基础配置还可以这么有趣
  14. Color颜色——颜色模式、颜色基本特征、网页颜色以及其代码
  15. 2013年台式计算机型号,2013cpu天梯图,台式机处理器天梯图
  16. 【无标题】VisualStudio2022断点调试
  17. 【es】es界面化管理工具cerebro的安装和使用
  18. usb声卡驱动(六):usb声卡中的pcm打开和关闭
  19. server服务(hander传值)
  20. 用网线实现两台电脑之间的大文件传输(使用电脑备份)

热门文章

  1. S5700日志查看与清空
  2. 2020前端面试(一面面试题)
  3. 面试官系统精讲Java源码及大厂真题 - 33 CountDownLatch、Atomic 等其它源码解析
  4. Nginx配合uGIGI和Django用作应用程序网关
  5. 图片服务 - thumbor详细介绍
  6. 如何在Debian Linux上设置静态IP地址
  7. 52个有效方法(1) - 了解Objective-C语言的起源
  8. UWP通过机器学习加载ONNX进行表情识别
  9. C语言 找出任意两整数之间的素数以及他们的和
  10. 【Python爬虫】存储格式化数据