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

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

猜你喜欢

转载自www.cnblogs.com/sky37/p/12244492.html