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 详细题解