当前位置: 首页 > news >正文

剑指Offer系列(java版,详细解析)60.n个骰子的点数

题目描述

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

难度中等213收藏分享切换为英文接收动态反馈

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

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

示例 1:

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

示例 2:

输入: 2
输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

限制:

1 <= n <= 11

测试用例

  • 功能测试(1、2、3、4个骰子的各点数的概率)
  • 特殊输入测试(输入0)
  • 性能测试(输入较大的数字,如11)。

题目考点

  • 考察应聘者的数学建模能力。
  • 考察应聘者对递归和循环的性能的理解。

解题思路

用两个数组来存储骰子点数的每个总数出现的次数(动态规划数组)

n个骰子,n轮

在第一轮循环中,第一个数组中的第n个数字表示骰子和为n出现的次数

在下一轮循环中,我们加上一个新的骰子,此时和为n的骰子出现的次数应该等于上一轮循环中骰子点数和为n-1、n-2、n-3、n-4、n-5与n-6的次数的总和

依次类推求解。

参考解题

class Solution {
    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;
    }
}

需要注意的一点就是,动态规划数组要用long型,不然会有int型溢出。

相关文章:

  • 剑指Offer系列(java版,详细解析)61.扑克牌中的顺子
  • 剑指Offer系列(java版,详细解析)62.圆圈中最后剩下的数字
  • 剑指Offer系列(java版,详细解析)63.股票的最大利润
  • 剑指Offer系列(java版,详细解析)64.求1+2+...+n
  • 剑指Offer系列(java版,详细解析)65.不用加减乘除做加法
  • 剑指Offer系列(java版,详细解析)66.构建乘积数组
  • 剑指Offer系列(java版,详细解析)67.把字符串转化成整数
  • 剑指Offer系列(java版,详细解析)68.树中两个节点的最低公共祖先
  • Go语言fmt.Sprintf(格式化输出)
  • Go 面试系列:Go interface中nil的比较问题
  • Go 面试系列: new 和 make有什么不同之处呢?
  • Go 面试系列: Goroutine 数量是越多越好吗?设置多少会影响GC调度呢?
  • 什么是读、写扩散?
  • 一文搞定权限设计模型(RBAC,ABAC)超详细图文解析
  • 一文搞定权限管理!授权、鉴权超详细解析
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • es6要点
  • JavaScript 基本功--面试宝典
  • mysql 5.6 原生Online DDL解析
  • Redis在Web项目中的应用与实践
  • Xmanager 远程桌面 CentOS 7
  • 编写符合Python风格的对象
  • 高性能JavaScript阅读简记(三)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 解析 Webpack中import、require、按需加载的执行过程
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 入口文件开始,分析Vue源码实现
  • 使用 QuickBI 搭建酷炫可视化分析
  • 终端用户监控:真实用户监控还是模拟监控?
  • kubernetes资源对象--ingress
  • Semaphore
  • ​批处理文件中的errorlevel用法
  • #1014 : Trie树
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (8)STL算法之替换
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (接口封装)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Mysql的优化设置
  • .NET 8.0 中有哪些新的变化?
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @media screen 针对不同移动设备
  • [.net]官方水晶报表的使用以演示下载
  • [145] 二叉树的后序遍历 js