Leetcode 470. 用 Rand7() 实现 Rand10()
题目
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
测试样例
示例 1:
输入: 1
输出: [7]
示例 2:
输入: 2
输出: [8,4]
示例 3:
输入: 3
输出: [8,1,10]
提示:
- rand7 已定义。
- 传入参数: n 表示 rand10 的调用次数。
题解
10可以写成5+5的形式,而且1/10 = 1/5 * 1/2的形式。因此我们使用两个rand7,其中一个只允许生成0~5之间的数,这样就是1/5;另一个,我们在生成0 ~ 6之间的数,用5*(first%2),这样就是1/2。
详细过程见代码
代码
int rand10() {
int first,second;
while(1){
first = rand7();
second = rand7();
if(first==7 || second>5) continue;
return 5*(first%2) + second;
}
return 0;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-rand10-using-rand7
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。