题目地址:
https://leetcode.com/problems/implement-rand10-using-rand7/description/
假设我们有一个API叫rand7()
可以等概率随机产生
1
∼
7
1\sim 7
1∼7中的一个数,要求利用这个API实现rand10()
。
参考https://blog.csdn.net/qq_46105170/article/details/109269492。考虑API被叫的次数,每轮有 40 49 \frac{40}{49} 4940的概率停止,从而轮数的期望就是 49 40 \frac{49}{40} 4049,而每轮叫两次,所以叫的次数的期望是 49 20 \frac{49}{20} 2049。代码如下:
// The rand7() API is already defined for you.
// int rand7();
// @return a random integer in the range 1 to 7
class Solution {
public:
int rand10() {
while (true) {
int t = (rand7() - 1) * 7 + rand7();
if (t <= 40) return (t - 1) / 4 + 1;
}
}
};
平均时间复杂度 O ( 1 ) O(1) O(1),空间 O ( 1 ) O(1) O(1)。