LeetCode 470. 【Java】470. Implement Rand10() Using Rand7()
原题链接
简单
作者:
tt2767
,
2020-03-02 17:29:58
,
所有人可见
,
阅读 1441
/*
1. 扩展rand 范围:
rand7() : 1,2, 3, 4, 5, 6, 7
(rand7()-1) * 7 : 0,7,14,21,28,35,42
(rand7()-1) * 7 + rand7() : 相加元素无重复, 即等概率构成了 1~49, 即rand49()
2. 缩小rand 范围:
2.1 拒绝采样缩小为10的倍数: r40 = r49 <= 40 ? r49 : rand10()
2.2 10的倍数缩小为10: r10 = r40 % 10 + 1
*/
/**
* The rand7() API is already defined in the parent class SolBase.
* public int rand7();
* @return a random integer in the range 1 to 7
*/
class Solution extends SolBase {
public int rand10() {
int r49 = (rand7() - 1 ) * 7 + rand7();
return r49 <= 40 ? r49 % 10 + 1 : rand10();
}
}
(rand7()-1) * 7 + rand7()
: 相加元素无重复, 即等概率构成了 1~49, 即rand49()注: 即在
0,7,14,21,28,35,42
基础上等概率加1, 2, 3, 4, 5, 6, 7
。即第一个rand7为0时:1, 2, 3, 4, 5, 6, 7 (均为1/7概率)
第一个rand7为1时:8, 9, 10, 11, 12, 13, 14
以此类推
第一个rand7为7时:43, 44, 45, 46, 47, 48, 49 (均为1/7概率)