美文网首页
470. 用rand7实现rand10(Python)

470. 用rand7实现rand10(Python)

作者: 玖月晴 | 来源:发表于2020-10-23 17:22 被阅读0次

    题目

    难度:★★★☆☆
    类型:数组
    方法:数学

    力扣链接请移步本题传送门
    更多力扣中等题的解决方案请移步力扣中等题目录

    已有方法 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;
    2. 为了使生成的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解决方案,请移步力扣中等题解析

    相关文章

      网友评论

          本文标题:470. 用rand7实现rand10(Python)

          本文链接:https://www.haomeiwen.com/subject/loovmktx.html