天天看点

102、用 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 的调用次数。

进阶:

rand7()调用次数的 期望值 是多少 ?

你能否尽量少调用 rand7() ?

在这里

102、用 Rand7() 实现 Rand10()

主要是这个拒绝采样比较的意外

参照这个博客讲的比较详细添加链接描述

代码:

class Solution extends SolBase {
    public int rand10() {
       //		用rand7实现rand10关键是产生的数字的概率是一致的
		int x1 = rand7();
		int y1 = rand7();
		while (((x1 - 1) * 7 + y1) > 40 ) {
			x1 = rand7();
			y1 = rand7();
		}
		return ((x1 - 1) * 7 + y1) % 10 + 1;
		
        
    }
}