天天看點

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;
		
        
    }
}