首页 > 其他分享 >LeetCode题练习与总结:用 Rand7() 实现 Rand10() -- 470

LeetCode题练习与总结:用 Rand7() 实现 Rand10() -- 470

时间:2024-12-15 19:30:48浏览次数:7  
标签:10 49 -- Rand10 40 rand7 num Rand7 范围

一、题目描述

给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。

你只能调用 rand7() 且不能调用其他方法。请不要使用系统的 Math.random() 方法。

每个测试用例将有一个内部参数 n,即你实现的函数 rand10() 在测试时将被调用的次数。请注意,这不是传递给 rand10() 的参数。

示例 1:

输入: 1
输出: [2]

示例 2:

输入: 2
输出: [2,8]

示例 3:

输入: 3
输出: [3,8,10]

提示:

  • 1 <= n <= 10^5

二、解题思路

  1. 使用两次 rand7() 调用来生成一个更大的均匀分布的整数范围。具体来说,将第一次调用的结果乘以 7,然后加上第二次调用的结果,这样我们可以得到一个 [1, 49] 范围内的整数。
  2. 由于我们需要的是 [1, 10] 范围内的整数,我们可以将 [1, 40] 范围内的整数映射到 [1, 10],然后对 [41, 49] 范围内的整数进行重新采样。
  3. 使用取模运算和加法将 [1, 40] 范围内的整数映射到 [1, 10]。

三、具体代码

class Solution extends SolBase {
    public int rand10() {
        int result;
        int num;
        do {
            // 生成一个 [1, 49] 范围内的均匀随机整数
            num = (rand7() - 1) * 7 + rand7();
            // 如果生成的数在 [41, 49] 范围内,则重新生成
        } while (num > 40);
        // 取模运算得到 [1, 10] 范围内的整数
        result = num % 10 + 1;
        return result;
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 在 rand10() 方法中,我们有一个 do-while 循环,这个循环会持续执行直到生成的 num 在 [1, 40] 范围内。
  • 每次循环都会调用两次 rand7() 方法。
  • rand7() 方法返回一个 [1, 7] 范围内的随机数,因此 (rand7() - 1) * 7 + rand7() 会生成一个 [1, 49] 范围内的随机数。
  • 在 [1, 49] 范围内,有 40 个数是有效的(即 [1, 40]),而 9 个数是无效的(即 [41, 49])。
  • 因此,期望的循环次数是 1 / (40/49),因为每次循环有 40/49 的概率生成一个有效的数。
  • 由于 rand7() 是常数时间操作,循环的期望时间复杂度为 O(1)
2. 空间复杂度
  • 在 rand10() 方法中,我们只声明了两个整型变量 result 和 num
  • 这些变量占用的空间不随输入大小而变化,因此空间复杂度为 O(1)

五、总结知识点

  1. 类继承class Solution extends SolBase:这行代码表明 Solution 类继承了 SolBase 类。继承是面向对象编程中的一个基本概念,允许子类继承父类的属性和方法。

  2. 方法重写public int rand10():这是 Solution 类中的一个方法,它重写了父类 SolBase 中的 rand7() 方法,用于生成一个 [1, 10] 范围内的随机整数。

  3. 随机数生成rand7():假设这是一个父类 SolBase 中定义的方法,用于生成一个 [1, 7] 范围内的随机整数。随机数生成是编程中常见的需求,用于模拟不确定性和概率性事件。

  4. 循环控制do { ... } while (num > 40);:这是一个 do-while 循环,它至少执行一次循环体,然后根据条件判断是否继续执行。这里用于确保生成的随机数在 [1, 40] 范围内。

  5. 算术运算(rand7() - 1) * 7 + rand7():这行代码通过算术运算将两个 [1, 7] 范围内的随机数转换为一个 [1, 49] 范围内的随机数。这涉及到基本的算术运算,如减法、乘法和加法。

  6. 取模运算num % 10:取模运算符 % 用于计算一个数除以另一个数的余数。在这里,它用于将 [1, 40] 范围内的数映射到 [0, 9] 范围,然后通过加 1 将结果转换为 [1, 10] 范围。

  7. 变量声明和赋值int result; 和 int num;:声明了两个整型变量 result 和 num,用于存储计算结果和中间计算值。

  8. 方法返回值return result;:这行代码用于从 rand10() 方法中返回计算得到的随机数。

  9. 条件判断while (num > 40);:这是一个条件判断,用于检查生成的随机数是否超出了我们需要的范围,如果是,则继续循环。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

标签:10,49,--,Rand10,40,rand7,num,Rand7,范围
From: https://blog.csdn.net/weixin_62860386/article/details/144479103

相关文章

  • AI即时直播换脸换声技术解析与应用前景
    文中插图下面有实验场,可以亲自体验AI的强大之处!AI在多个领域的应用场景不断扩展,尤其是在娱乐、社交媒体以及直播行业。AI即时直播换脸与换声,作为这一波AI技术革新的代表性应用,不仅在技术上实现了巨大的突破,也带来了前所未有的创作自由。然而,这项技术的出现也引发了广泛的讨论,......
  • AI数字人(无人)直播:技术架构与未来展望
    文中配图下面有实验场,可以亲自体验一把AI数字人的强大!近年来,随着人工智能技术的迅猛发展,AI数字人(DigitalHuman)逐渐成为了直播行业的新兴力量。AI数字人直播不仅能够模拟人类行为、声音和情感反应,还能在虚拟环境中进行高度交互,吸引了广泛的关注与投资。本文将深入探讨AI数字人......
  • 如何在 Ubuntu 22.04 上使用 vnStat 监控网络流量
    简介vnStat是一个免费的、开源的、基于控制台的Linux操作系统网络流量监控工具。通过vnStat,你可以在不同的时间段监控网络统计数据。它简单、轻量级,并且消耗的系统资源很小。vnStat允许你按小时、日、月、周和日生成网络流量数据。本教程将向你展示如何在Ubuntu22.04上安......
  • web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
    ......
  • Qt之热键盘使用(八)
    Qt开发 系列文章-Hot-keyboard(八)目录前言一、键盘使用二、QKeyEvent按键事件1.使用QShortcut类2.重写keyPressEvent三、QxtGlobalShortcut库四、QHotkey库总结前言Qt实现热键盘/快捷键的使用,比较直接简单的是利用Qt自带的QShortcut类、QKeyEvent类,通过改写相关......
  • Pta|找鞍点
    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。输入格式:输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。输出格式:输出在一行中按照“行下标列下标”(下标从0开始)的格式......
  • DP协议:概括
    来了来了!!!开始之前扯点概念,知道DP好在哪里,以及看到它的发展趋势,才知道我们为什么有学习的必要。DP的优势DisplayPort(DP)协议作为一种专为数字音频和视频传输设计的高速串行接口标准,在现代显示技术和多媒体应用中扮演着至关重要的角色。它由视频电子标准协会(VESA)这一权......
  • DP协议:缩略词
    缩写代表的含义ACT分配更改触发(AllocationChangeTrigger)API应用程序编程接口(ApplicationProgrammingInterface)AUX辅助(Auxiliary)BER比特错误率(BitErrorRate)bpc每色比特数(BitsPerComponent)bpp每像素比特数(BitsPerPixel)BE消隐结束(BlankingEnd)BS消隐开始(BlankingSta......
  • DP协议:术语表
    术语定义ANSI8B/10B通道编码规范,如ANSIX3.230-1994条款11所述AUXCH半双工、双向通道,位于DisplayPort发射器和DisplayPort接收器之间。由1个差分对组成,使用Manchester格式以1Mbps速率或FAUX格式以720Mbps速率传输数据。DisplayPort上游设备是主设备(也称为AUXCH请求者),发起......
  • 【Microi 吾码】探索 Microi 吾码低代码开发平台:高效开发的新利器
    目录......