LeetCode470 - Implement Rand10() Using Rand7() - Medium (Python)
Posted sky37
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于LeetCode470 - Implement Rand10() Using Rand7() - Medium (Python)的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 470. Implement Rand10() Using Rand7()
leetcode470——用 Rand7() 实现 Rand10()
LC 470. Implement Rand10() Using Rand7()