leetcode470 用Rand7()实现Rand10()

news/2024/11/2 0:37:12/

力扣470

第一步:根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1

调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7

这时我们设置:生成1,2,3(也就是小于4)的时候,我们的rand_0and1函数就返回0

生成4,5,6(也就是小于4)的时候,我们的rand_0and1函数就返回1

如果生成7,那我们继续再调用一次Rand7()函数

    public  int  rand_0and1(){int result=0;result=rand7();if(result<4){return 0;}else if(result>=4&&result<7){return 1;}else//result=7{while(result==7){result=rand7();}//跳出循环说明终于得到一个不为7的随机数return  result<4?0:1;}}

第二步:要生成的是1~10,我们先生成0~9(然后加1即可),怎么由我们第一步得到的0~1生成0~9呢?

1个二进制位可以保证等概率返回0,1

2个二进制位可以保证等概率返回0,1,2,3

3个二进制位可以保证等概率返回0,1,2,3,4,5,6,7

4个二进制位就可以保证等概率返回(最小是0000,最大是1111十五)0,1,2,3,4,5,6,7.......15

当发现返回的大于9,那就重新生成一个新的数,直到生成一个0~9之间的数

记rand_0and1()产生的值为temp

    public int rand10(){int result=0;result=(rand_0and1())+(rand_0and1()<<1)+(rand_0and1()<<2)+(rand_0and1()<<3);if(result<10){return  result+1;}else{while(result>=10){result=(rand_0and1())+(rand_0and1()<<1)+(rand_0and1()<<2)+(rand_0and1()<<3);}//跳出循环,说明终于生成了一个比10小的数,符合要求return    result+1;}}

 将上面的合起来完整代码如下:

class Solution extends SolBase 
{public int rand10(){int result=0;result=(rand_0and1())+(rand_0and1()<<1)+(rand_0and1()<<2)+(rand_0and1()<<3);if(result<10){return  result+1;}else{while(result>=10){result=(rand_0and1())+(rand_0and1()<<1)+(rand_0and1()<<2)+(rand_0and1()<<3);}//跳出循环,说明终于生成了一个比10小的数,符合要求return    result+1;}}public  int  rand_0and1(){int result=0;result=rand7();if(result<4){return 0;}else if(result>=4&&result<7){return 1;}else//result=7{while(result==7){result=rand7();}//跳出循环说明终于得到一个不为7的随机数return  result<4?0:1;}}
}

通过rand5()生成rand7()也是一样的,

第一步:先通过rand5()函数制作一个可以随机等概率生成0和1的函数rand_0and1(生成1,2就返回0,生成3,4就返回1,生成5就重新再生成1个数,直到生成不等于5的数返回0或者1)

第二步:通过rand_0and1随机等概率生成0~6

result=(rand_0and1())+(rand_0and1()<<1)+(rand_0and1()<<2);

生成大于6的数,就重新生成,直到生成一个小于等于6的数


http://www.ppmy.cn/news/24593.html

相关文章

Dubbo面试题2023

1、为什么要用Dubbo 随着服务化的进一步发展&#xff0c;服务越来越多&#xff0c;服务之间的调用和依赖关系也越来越复杂&#xff0c;诞生了面向服务 的架构体系(SOA)&#xff0c;也因此衍生出了一系列相应的技术&#xff0c;如对服务提供、服务调用、连接处理、通信协议、 …

如何写好 Python 的 Lambda 函数?

当你需要完成一件小工作时&#xff0c;在本地环境中使用这个函数&#xff0c;可以让工作如此得心应手&#xff0c;它就是 Lambda 函数。 Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas&#xff0c;它们的语法如下&#xff1a; lambda arguments: expression…

【吉先生的Java全栈之路】

吉士先生Java全栈学习路线&#x1f9e1;第一阶段Java基础: 在第一阶段:我们要认真听讲,因为基础很重要!基础很重要!基础很重要!!! 重要的事情说三遍。在这里我们先学JavaSE路线&#xff1b;学完之后我们要去学第一个可视化组件编程《GUI》&#xff1b;然后写个《贪吃蛇》游戏耍…

C# Lambda表达式含义及各种写法

Lambda表达式在各个语言中的表达方式都不太相同&#xff0c;本文重点介绍C#的Lambda表达式。 首先&#xff0c;Lambda表达式就是一个匿名的方法/函数。 以下面的一个完整版作为例子&#xff0c;前面是参数&#xff0c;后面是返回值&#xff1a; 由于 Lambda表达式和委托常常一起…

【漏洞真实影响分析】Apache Kafka Connect 模块JNDI注入(CVE-2023-25194)

系列简介&#xff1a; 漏洞真实影响分析是墨菲安全实验室针对热点漏洞的分析系列文章&#xff0c;帮助企业开发者和安全从业者理清漏洞影响面、梳理真实影响场景&#xff0c;提升安全应急响应和漏洞治理工作效率。 漏洞概述 Apache Kafka Connect服务在2.3.0 至 3.3.2 版本中&…

【新】华为OD机试 - 交换字符(Python)| 刷完获取OD招聘渠道

交换字符 题目 给定一个字符串 S 变化规则: 交换字符串中任意两个不同位置的字符 M S 都是小写字符组成 1 <= S.length <= 1000 输入 一串小写字母组成的字符串 输出 按照要求变换得到最小字符串 示例一 输入 abcdef输出 abcdef示例二 输入 bcdefa输出 acde…

量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)

文章目录动量因子与行业轮动概述动量因子的理解投资视角下的行业轮动现象投资者视角与奈特不确定性动量因子在行业风格上的效果测算动量因子效果测算流程概述1. 行业选择&#xff1a;申万一级行业2. 动量因子选择&#xff1a;阿隆指标&#xff08;Aroon&#xff09;3. 测算方法…

Spring Boot HTTP 400排查

背景 前段时间朋友咨询他们公司某个HTTP接口偶现400错误&#xff0c;有没有什么好的分析方法和解决方案&#xff0c;使用的是Spring Cloud体系。最近有时间总结下这个问题的处理过程。 为了分析问题&#xff0c;笔者使用 Spring Boot 3.0.2还原报错场景进行讲解。 问题分析 …