1. 程式人生 > >[Swift]LeetCode470. 用 Rand7() 實現 Rand10() | Implement Rand10() Using Rand7()

[Swift]LeetCode470. 用 Rand7() 實現 Rand10() | Implement Rand10() Using Rand7()

提示 sam ready 整數 turn mat fin memory class

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 }

 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 }

[Swift]LeetCode470. 用 Rand7() 實現 Rand10() | Implement Rand10() Using Rand7()