微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[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,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 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐