[Swift]LeetCode470. 用 Rand7() 实现 Rand10() | Implement Rand10() Using Rand7()

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] 

Note:

  1. rand7 is predefined.
  2. Each testcase has one argument: n, the number of times that rand10is called.

Follow up:

  1. What is the expected value for the number of calls to rand7() function?
  2. Could you minimize the number of calls to rand7()?


已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

不要使用系统的 Math.random() 方法。

示例 1:

输入: 1
输出: [7]

示例 2:

输入: 2
输出: [8,4]

示例 3:

输入: 3
输出: [8,1,10] 

提示:

  1. rand7 已定义。
  2. 传入参数: n 表示 rand10 的调用次数。

进阶:

  1. rand7()调用次数的 期望值 是多少 ?
  2. 你能否尽量少调用 rand7() ?


Runtime: 44 ms

Memory Usage: 5.9 MB

 1 /**
 2  * The rand7() API is already defined in the parent class SolBase.
 3  * func rand7() -> Int = {}
 4  * @return a random integer in the range 1 to 7
 5  */
 6 class Solution : SolBase {
 7     func rand10() -> Int {
 8         while(true)
 9         {
10             var a:Int = rand7()
11             var b:Int = rand7()
12             var num:Int = (a - 1) * 7 + b
13             if num <= 40 {return num % 10 + 1}
14             a = num - 40
15             b = rand7()
16             num = (a - 1) * 7 + b
17             if num <= 60 {return num % 10 + 1}
18             a = num - 60
19             b = rand7()
20             num = (a - 1) * 7 + b
21             if num <= 20 {return num % 10 + 1}
22         }
23     }
24 }

44ms

 1 /**
 2  * The rand7() API is already defined in the parent class SolBase.
 3  * func rand7() -> Int = {}
 4  * @return a random integer in the range 1 to 7
 5  */
 6 class Solution : SolBase {
 7     func rand10() -> Int {
 8         var a, b, no: Int?
 9         repeat {
10             a = rand7() - 1
11             b = rand7() - 1
12             no = 7 * a! + b!
13         } while (no! > 39)
14
15         return (no! % 10) + 1
16     }
17 }


48 ms

 1 /**
 2  * The rand7() API is already defined in the parent class SolBase.
 3  * func rand7() -> Int = {}
 4  * @return a random integer in the range 1 to 7
 5  */
 6 class Solution : SolBase {
 7     func rand10() -> Int {
 8         var num:Int = (rand7() - 1) * 7 + rand7()
 9         return (num <= 40) ? (num % 10 + 1) : rand10()
10     }
11 }

原文地址:https://www.cnblogs.com/strengthen/p/10347532.html

时间: 2024-10-10 13:40:21

[Swift]LeetCode470. 用 Rand7() 实现 Rand10() | Implement Rand10() Using Rand7()的相关文章

LC 470. Implement Rand10() Using Rand7()

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:

[LeetCode] Implement Rand10() Using Rand7()

题目描述 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: 1Output: [7] Example

470. Implement Rand10() Using Rand7() (拒绝采样Reject Sampling)

问题 已提供一个Rand7()的API可以随机生成1到7的数字,使用Rand7实现Rand10,Rand10可以随机生成1到10的数字. 思路 简单说: (1)通过(Rand N - 1) % 10 + 1的方法,可以求出Rand10,当N是10的倍数的时候. (2)用( Rand7 - 1 ) * 7 + Rand7可以随机生成1-49,记作Rand49. (3)如果可以通过Rand49计算出Rand40,即随机生成1-40,就可以通过Rand40 % 10来取得Rand10. (4)如何通过

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:

[LeetCode] 470. Implement Rand10() Using Rand7()

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: 1Output: [7]Example 2: In

[LeetCode] Implement Rand10() Using Rand7() 使用Rand7()来实现Rand10()

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:

[Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)

Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // returns true trie.search("app"); // returns false trie.startsWith("app");

[Swift]LeetCode478. 在圆内随机生成点 | Generate Random Point in a Circle

Given the radius and x-y positions of the center of a circle, write a function randPoint which generates a uniform random point in the circle. Note: input and output values are in floating-point. radius and x-y position of the center of the circle is

已知rand7()&#160;可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率)

题目:已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率). 解析:首先利用rand7()产生1-5的5个数,每个数的概率为1/5,然后在这5个数的基础上再以1/2的概率加上5,这样就能以1/10的概率产生每一个数. 答案: int rand10() { int tmp1,tmp2; do { tmp1=rand7(); }while(tmp1>5); do { tmp2=rand7(); }while(tmp2>2); retur