【LeetCode] Rand7を(使用Rand10()を実装します)

タイトル説明

1~7の範囲で一様乱数整数を生成する機能rand7を与えられ、10の範囲1において一様乱数整数を生成する機能rand10を書き込みます。

システムのMath.random()を使用しないでください。

例1:

入力:1
出力:[7]

例2:

入力:2
出力:[8,4]

例3:

入力:3
出力:[8,1,10]

注意:

rand7は、事前定義されています。
nは、rand10が呼び出された回数:各テストケースは一つの引数を持っています。

rand7が均等rand7 rand10を達成するために必要に応じて、1〜7を分散返さ、1〜10の均一な分布に戻すように頼みました。
アイデアは、溶液関数randnを構築することであり、nは10の整数倍である必要です。これは、関数randn%10 rand10によって得ることができます。
それは以上40をフィルタリングすることによってrand7 rand49、rand49することによって得ることができるがrand40を得ることができ、従ってrand10ことができます。次のように要約すると、ソリューションは以下のとおりです。

rand7 - > rand49 - > rand40 - > rand10

この溶液は、シーンのすべての関数randn生成RANDM(N <M)に一般化することができます。

C ++の実装

。1 
2
3
4
5
6
7
8
9
10
11
12である
13である
14
15
16
17
18である
。19
20
21であり、
22は
23である
24
25
大カラム   Rand10()を使用してRand7()を実装[LeetCode] > 26 S = "行"である
27

// int型のrand7();
// 7の範囲1にランダムな整数を@return

クラス {
パブリック: INT rand10(){ CONST INT NUM = rand40()。戻りNUM 10 + 1 }プライベート: //戻り0〜48ランダムINT rand49() {リターン7 *(rand7() - 1)+ rand7() - 1 ; } //戻り0〜39ランダムINT rand40() { int型NUM = rand49()。一方、 NUM > = 40 { NUM
















= rand49()。
} 戻りNUM } }。



おすすめ

転載: www.cnblogs.com/liuzhongrong/p/11874866.html