九章算法 | 字节跳动面试题:用 Rand7()实现 Rand10()
时间: 2020-08-21来源:V2EX
前景提要
已有方法 rand7  可生成 1 到 7 范围内的均匀随机整数,试写一个方法  rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法 rand7  已定义。 传入参数:  n  表示  rand10  的调用次数。
在线评测地址: LintCode 领扣
样例 1: 输入:1 输出:[7]
样例 2: 输入:2 输出:[8,4]
样例 3: 输入:3 输出:[8,1,10]
[题解]
考点: 随机数
题解: [1,7] 的随机数, 减一-> [0,6] 的随机数,乘以 7 -> {0,7,14,21,28,35,42} 中的随机数 [1,7]的随机数 1+2 是[1,49]的随机数,且均匀生成 -> [0,48]的随机数 取出[0,39]区间 取到的概率是 1/49 除以 4-> [0,9]的随机数 加一->[1,10]的随机数 public class Solution extends SolBase{ public int rand10() { while(true){ int rand49 = (rand7() - 1) * 7 + rand7() - 1; if(rand49 <= 39) { return rand49 / 4 + 1; } } } }
更多语言代码参见: 九章算法

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行