Leetcode No.470 用 Rand7() 实现 Rand10()

Posted AI算法攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode No.470 用 Rand7() 实现 Rand10()相关的知识,希望对你有一定的参考价值。

一、题目描述

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

不要使用系统的 Math.random() 方法。

示例 1:
输入: 1
输出: [7]

示例 2:
输入: 2
输出: [8,4]

示例 3:
输入: 3
输出: [8,1,10]

提示:
rand7 已定义。
传入参数: n 表示 rand10 的调用次数。

进阶:
rand7()调用次数的 期望值 是多少 ?
你能否尽量少调用 rand7() ?

二、解题思路

1、用rand2()实现rand4()

假设已知rand2()可以均匀的生成[1,2]的随机数,现在想均匀的生成[1,4]的随机数,该如何考虑?

我想如果你也像我一样第一次接触这个问题,那么很可能会这么考虑——令两个rand2()相加,再做一些必要的边角处理。如下:

rand2() + rand2() = ? ==> [2,4]
   1    +   1     = 2
   1    +   2     = 3
   2    +   1     = 3
   2    +   2     = 4
// 为了把生成随机数的范围规约成[1,n],于是在上一步的结果后减1
(rand2()-1) + rand2() = ? ==> [1,3]
   0       +   1     = 1
   0       +   2     = 2
   1       +   1     &

以上是关于Leetcode No.470 用 Rand7() 实现 Rand10()的主要内容,如果未能解决你的问题,请参考以下文章

leetcode470——用 Rand7() 实现 Rand10()

LeetCode 470. 用 Rand7() 实现 Rand10()

《LeetCode之每日一题》:139.用 Rand7() 实现 Rand10()

LeetCode 470 用Rand7()实现Rand10()[数学] HERODING的LeetCode之路

精选力扣500题 第34题 LeetCode 470. 用 Rand7() 实现 Rand10()c++ / java 详细题解

leetcode中等470rand7实现rand10