zoukankan      html  css  js  c++  java
  • [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 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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 }
  • 相关阅读:
    多线程demo
    my parnter code review
    my code review
    思考题
    数组中最大子数组的和
    TestForGit
    say Hellow的测试类及测试结果
    读《Build To Win》感想
    随机生成300道四则运算
    思考题 程序员本计划在三天内完成任务,但在第三天的下午他发现了自己程序的弱点,他在想是否是自己采取另一种方法去解决它,但是需要额外的时间。如若反之,则会在后期团队会在集成方面花费时间。该怎么办?
  • 原文地址:https://www.cnblogs.com/strengthen/p/10347532.html
Copyright © 2011-2022 走看看