题目
难度:★★★☆☆
类型:数组
方法:数学
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
已有方法 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() ?
解答
首先,我们可以很方便地使用两个rand7实现一个rand49,然后,使用rand49对10取余,得到rand10。
这里需要注意两点:
- 需要注意是否需要对结果进行+1和-1;
- 为了使生成的1-10等概率,需要对rand49生成的一些数进行排除处理。
def rand7():
import random
return random.randint(0, 6) + 1
class Solution:
def rand10(self):
"""
:rtype: int
"""
def rand49():
return (rand7()-1) * 7 + rand7() # 1 ~ 49
while True:
a = rand49() - 1 # 0 ~ 48
if a < 40:
return a % 10 + 1 # 1 ~ 10
如有疑问或建议,欢迎评论区留言~
有关更多力扣中等题的python解决方案,请移步力扣中等题解析
网友评论