leetcode 470. 用 Rand7() 实现 Rand10()
难度:中等
频次:55
题目:
给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。
你只能调用 rand7() 且不能调用其他方法。请不要使用系统的 Math.random() 方法。
每个测试用例将有一个内部参数 n,即你实现的函数 rand10() 在测试时将被调用的次数。请注意,这不是传递给 rand10() 的参数。
解题思路:数学规律
规律1:
randX-1=【0,X-1】==a
randY=【1,Y】==b
那么ab就会是下面的表格,即所有的随机数都有了
randXY=(randX-1)*X+randY;
规律2
randX%N+1 可以用randX模拟randN【但是这一部分只能在N的倍数内,超出部分要舍弃—这也是while(true)的意义】
/*** The rand7() API is already defined in the parent class SolBase.* public int rand7();* @return a random integer in the range 1 to 7*/
class Solution extends SolBase {public int rand10() {//while的 意义是有一些数组遍历不到,重来。比如说1-49 41-49就遍历不到//后面的81 也遍历不到while(true){int num=(rand7()-1)*7+rand7(); //==rand49() randX*Y=(randX()-1)*X+randYif(num<=40) {return num%10+1;}else{//这里是41-49 %10----1-9 rand9 减少丢弃的数字int a=(num-1)*9+num;if(a<=80) {return num%10+1;}}}}
}
leetcode 470. 用 Rand7() 实现 Rand10()相关推荐
- LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)
1. 题目 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数. 不要使用系统的 Math.random() 方法. ...
- 【LeetCode笔记】470. 用Rand7()实现Rand10()(Java、概率)
文章目录 题目描述 代码 & 思路 更新版 三刷 - 极简版 题目描述 貌似是比较高频的面试题目啊,有学概率论内味了(讲道理我概率论学得不好) 代码 & 思路 先用Rand7实现Ran ...
- 概率p输出1,概率1-p输出0,等概率输出0和1 【LeetCode】470. rand7()构造rand10() 系列变形(新浪、字节面试题)
目录 1. 等概率输出0和1 1.1 题目描述 1.2 解题思路 & 代码 2. 以 1/N 的概率返回 1~N 之间的数 3. 给定函数rand5() 构造rand7() 或 rand7() ...
- [Leedcode][JAVA][第470题][Ran7()实现Rand10()]
[问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...
- 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...
转自:http://blog.csdn.net/furturerock/article/details/6850634 View Code 1 int rand7() 2 { 3 return ran ...
- 【数据结构与算法】之深入解析“用Rand7()实现Rand10()”的求解思路与算法示例
一.题目要求 给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数. 你只能调用 rand7() 且不能调用其他方法,请 ...
- Rand7()实现Rand10()
这道题选自LeetCode470题,启发自题解,这道题在阿里的实习中出现过,解法基本是数学概率论中的知识. 当我们用random10实现random7的时候,我们根据概率论的知识知道random10会 ...
- 【每天学点算法题10.16】由rand7()生成rand10()
题目描述:给你一个函数rand7(),它可以等概率地生成1~7之间的随机数,使用这个函数rand7(),生成一个函数rand10(),使其能够等概率地生成1~10之间的随机数. 解决办法:舍去法.我们 ...
- 【经典题目】rand7()生成rand10()——随机数算法
随机数算法的转换 从小数向大数映射 这一类的算法主要分为两种,一种是从小数映射向大数,rand7()-->rand10().另外一种是从大数映射向小数rand10()-->rand7() ...
最新文章
- oracle迁移mysql视图中函数问题,mysql中to_char自定义函数。
- c语言二重循环的盒图怎么画,全国计算机二级C语言程序设计讲义 循环嵌套.ppt...
- Mysql 水平拆分和垂直拆分
- mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法
- keepalived高可用集群。
- How to setup SLF4J and LOGBack in a web app - fast--转载
- 【Thymeleaf】 循环固定次数/循环次数由变量控制
- java程序员应该掌握的技术才算得上熟练Java开发
- netty冲突 play sbt_《Netty官方文档》本地传输接口
- java redis hession_spring: 整合 springmvc shiro redis hessian rocketMQ
- SLF4J介绍以及与LOG4J、LOG4J2、LOGBACK整合方法
- 数据结构大作业-DBLP科学文献管理系统(三)聚团分析(并查集,最大团问题)
- java 字节替换_java 替换四个字节的字符 apos;\xF0\x9F\x98\x84\xF0\x9F)的解决方案 - 好库文摘...
- 网友:后悔知道太晚了,视频被判定为重复度过高?原来答案是这样
- OpenStack全网最全部署教程
- 202318读书笔记|《芭蕉·芜村·一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来!
- 魔百盒M302H-SM数码代工-卡刷固件-刷机包
- 笔记——MPEG视像
- 求赌王的密码 【问题描述】 赌王喜欢“A”,密码由6行6列扑克牌中每行“A”的位置数字组合而成。扑克牌点数由1~9,J,Q,K,A组成,每行的扑克牌中最多只能出现一次“A”;也可能没有“A”,
- 勇气 创业 生活 爱情 罗素 海灵格 gif