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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-wmvxochr-md.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

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.git

Do NOT use system's Math.random()github

Example 1:微信

Input: 1
Output: [7] 

Example 2:dom

Input: 2
Output: [8,4] 

Example 3:spa

Input: 3
Output: [8,1,10] 

Note:code

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

Follow up:orm

  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 範圍內的均勻隨機整數。htm

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

示例 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 }
相關文章
相關標籤/搜索