leetcode470 用 Rand7() 实现 Rand10()

方法是,把等概率产生数的空间扩大,使得该空间大于要产生新的数的范围,

然后找到最接近这个空间的一个值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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值