难度:中等
频次: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就会是下面的表格,即所有的随机数都有了

randX
Y=(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()相关推荐

  1. LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)

    1. 题目 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数. 不要使用系统的 Math.random() 方法. ...

  2. 【LeetCode笔记】470. 用Rand7()实现Rand10()(Java、概率)

    文章目录 题目描述 代码 & 思路 更新版 三刷 - 极简版 题目描述 貌似是比较高频的面试题目啊,有学概率论内味了(讲道理我概率论学得不好) 代码 & 思路 先用Rand7实现Ran ...

  3. 概率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() ...

  4. [Leedcode][JAVA][第470题][Ran7()实现Rand10()]

    [问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...

  5. 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...

    转自:http://blog.csdn.net/furturerock/article/details/6850634 View Code 1 int rand7() 2 { 3 return ran ...

  6. 【数据结构与算法】之深入解析“用Rand7()实现Rand10()”的求解思路与算法示例

    一.题目要求 给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数. 你只能调用 rand7() 且不能调用其他方法,请 ...

  7. Rand7()实现Rand10()

    这道题选自LeetCode470题,启发自题解,这道题在阿里的实习中出现过,解法基本是数学概率论中的知识. 当我们用random10实现random7的时候,我们根据概率论的知识知道random10会 ...

  8. 【每天学点算法题10.16】由rand7()生成rand10()

    题目描述:给你一个函数rand7(),它可以等概率地生成1~7之间的随机数,使用这个函数rand7(),生成一个函数rand10(),使其能够等概率地生成1~10之间的随机数. 解决办法:舍去法.我们 ...

  9. 【经典题目】rand7()生成rand10()——随机数算法

    随机数算法的转换 从小数向大数映射 这一类的算法主要分为两种,一种是从小数映射向大数,rand7()-->rand10().另外一种是从大数映射向小数rand10()-->rand7() ...

最新文章

  1. oracle迁移mysql视图中函数问题,mysql中to_char自定义函数。
  2. c语言二重循环的盒图怎么画,全国计算机二级C语言程序设计讲义 循环嵌套.ppt...
  3. Mysql 水平拆分和垂直拆分
  4. mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法
  5. keepalived高可用集群。
  6. How to setup SLF4J and LOGBack in a web app - fast--转载
  7. 【Thymeleaf】 循环固定次数/循环次数由变量控制
  8. java程序员应该掌握的技术才算得上熟练Java开发
  9. netty冲突 play sbt_《Netty官方文档》本地传输接口
  10. java redis hession_spring: 整合 springmvc shiro redis hessian rocketMQ
  11. SLF4J介绍以及与LOG4J、LOG4J2、LOGBACK整合方法
  12. 数据结构大作业-DBLP科学文献管理系统(三)聚团分析(并查集,最大团问题)
  13. java 字节替换_java 替换四个字节的字符 apos;\xF0\x9F\x98\x84\xF0\x9F)的解决方案 - 好库文摘...
  14. 网友:后悔知道太晚了,视频被判定为重复度过高?原来答案是这样
  15. OpenStack全网最全部署教程
  16. 202318读书笔记|《芭蕉·芜村·一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来!
  17. 魔百盒M302H-SM数码代工-卡刷固件-刷机包
  18. 笔记——MPEG视像
  19. 求赌王的密码 【问题描述】 赌王喜欢“A”,密码由6行6列扑克牌中每行“A”的位置数字组合而成。扑克牌点数由1~9,J,Q,K,A组成,每行的扑克牌中最多只能出现一次“A”;也可能没有“A”,
  20. 勇气 创业 生活 爱情 罗素 海灵格 gif

热门文章

  1. ajax 三种数据格式
  2. Linux监听进程是否存在,并加入定时任务
  3. ACM Smallest Difference
  4. 使用scanf()函数接收带空格的字符串
  5. C#日期格式化(转)
  6. 好程序员大数据教程:SparkShell和IDEA中编写Spark程序
  7. vue-自定义组件传值
  8. Linux查看某个端口是否被占用
  9. alloc、init你弄懂50%了吗?
  10. 文件上传到ftp服务工具类