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
原文地址:https://www.cnblogs.com/sky37/p/12244492.html
时间: 2024-10-10 13:40:26