思路1:根据rand7()产生的小范围数[1,7]组合成[1,10]。
那么如何组合?直接组合好像没办法,那么考虑先组合出更大的范围,再取其中的小范围。
rand7()
=>(1,2,3,4,5,6,7)
rand7()-1
=>(0,1,2,3,4,5,6)
[rand7()-1]*7
=>(0,7,14,21,28,35,42)
(rand7()-1)*7+rand7()-1
=>[0,48]
class Solution:
def rand10(self):
while True:
tmp = (rand7()-1)*7+rand7()-1 # =>[0,48]
if tmp<40: # =>[0,39]
return tmp%10+1 # =>[1,10]