1. 题目
https://leetcode.cn/problems/implement-rand10-using-rand7/submissions/425373186/
2. 解法
思路
这道题的要求是用rand7()函数来生成1到10之间的均匀随机数。
一种可能的解法是使用拒绝采样的方法,
- 即先用rand7()函数生成两个随机数,
- 然后将它们组合成一个1到49之间的随机数,
- 如果这个数在1到40之间,就返回它对10取余加1的结果,否则就重新生成。
这样可以保证每个数字出现的概率都是相同的。
规律
rand7->rand9
- 7*7 49
- 45 划线
- 取模
rand6 -> rand13
- 6*6 36
- 26划线
- 取模
具体实现
1 2 3 4 5 6 7 8 9 | class Solution { public int rand10() { int num = (rand7() - 1 ) * 7 + rand7(); // generate a random number from 1 to 49 while (num > 40 ) { // reject the numbers that are larger than 40 num = (rand7() - 1 ) * 7 + rand7(); } return num % 10 + 1 ; // return the result from 1 to 10 } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)