码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode470 - Implement Rand10() Using Rand7() - Medium (Python)

时间:2020-01-31 10:37:14      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:col   call   math   随机   style   example   range   put   一点   

Given a function rand7 which generates a uniform random integer in the range 1 to 7, write a function rand10 which generates a uniform random integer in the range 1 to 10.

Do NOT use system‘s Math.random().

 

Example 1:

Input: 1
Output: [7]

Example 2:

Input: 2
Output: [8,4]

Example 3:

Input: 3
Output: [8,1,10]

思路:题意比较简单,用rand7()来实现rand10()。rand7()产生的是1到7所有的整数,rand10()我们希望产生的是1到10所有的整数。有一点比较明显的是,如果我们只call一次rand7(),
我们是不可能产生8,9,10三个数字。所以显然我们应该至少call 2次。call 2次会产生的数字范围是1-49,注意不是1-14. (是乘法不是加法)1-49中如果我们可以discard 41-49. 那么此时
我们拥有的是1-40,可以产生题目要求的uniform random。因此题目要求转变为如果产生1-40,在输出答案的是把这个产生的随机数和10取余之后,要再加1. 不然40%10=0.
class Solution:
    def rand10(self):
        """
        :rtype: int
        """
        rand = 41
        
        while rand >= 41:
            rand = (rand7()-1) * 7 + rand7() 
            
        return rand%10 +1

LeetCode470 - Implement Rand10() Using Rand7() - Medium (Python)

标签:col   call   math   随机   style   example   range   put   一点   

原文地址:https://www.cnblogs.com/sky37/p/12244492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!