Rand7实现Rand10
470 用 Rand7() 实现 Rand10()
1. 拒绝采样
在解LC-470前先介绍一道拒绝采样的经典问题:利用频率近似概率的方式求出
由
1 | int main() { |
2. LC-470 Rand7生成Rand10
(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数 1
2
3
4
5
6
7
8
9
10
11class Solution {
public:
int rand10() {
while(true){
// 等概率生成[1,49]范围的随机数
int num = (rand7()-1)*7 + rand7();
// 拒绝采样,并返回[1,10]范围的随机数
if(num <= 40) return num % 10 + 1;
}
}
};