方法是,把等概率产生数的空间扩大,使得该空间大于要产生新的数的范围,
然后找到最接近这个空间的一个值k,使得k%新数==0,也就是说使得k是这个要新生成数的倍数。
对于本例子来讲,就是把等概率产生数的空间扩大至0-48。
然后取最接近48且为10的倍数的一个值k,这个值是40。
然后每次产生一个新值,若该值小于40,那么对该值mod10
也就是说新空间中的0,10,20,30代表10;1,11,21,31
代表1;2,12,22,32代表2;以此类推。
# The rand7() API is already defined for you.
# def rand7():
# @return a random integer in the range 1 to 7
class Solution:
def rand10(self):
"""
:rtype: int
"""
while True:
num=(rand7()-1)*7+rand7()-1
if num<40:
return num%10+1