月换新天。为有牺牲多壮志,敢教日

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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10347532.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

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 }
复制代码

 

posted @   为敢技术  阅读(234)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
哥伦布
09:09发布
哥伦布
09:09发布
3°
多云
东南风
3级
空气质量
相对湿度
47%
今天
中雨
3°/15°
周三
中雨
3°/13°
周四
小雪
-1°/6°