如Random7 Using Random5
:Given a random generator random5(), the return value of random5() is 0 - 4 with equal probability. Use random5() to implement random7().
class Solution(object):
def random7(self):
num = self.random25()
while num > 20:
num = self.random25()
return num % 7
def random25(self):
return 5 * random5() + random5()
关键在于def random25(self):
return 5 * random5() + random5().其实这跟我亚马逊二面时那个用random2()构造一个平均分布的随机函数,底层原理是一样的。randomR()只能直接构造出个数为R的幂的随机分布函数。不管是用它这种方法,还是我那种二叉查询的方法,时间复杂度也是一样的。
上一段是第一步,可以得出一个分布个数为等比数列的随机函数系列。第二步其实也相对简单了,就是拿其中最小的一个分布数大于等于7(如果是其它值原理也一样)的随机函数,分布数中必有最大的7的倍数(7a)。随机结果若小于7a,则可得结果,若否则递归之