leetcode 470. 用 Rand7() 实现 Rand10()
生活随笔
收集整理的這篇文章主要介紹了
leetcode 470. 用 Rand7() 实现 Rand10()
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
難度:中等
頻次:55
題目:
給定方法 rand7 可生成 [1,7] 范圍內(nèi)的均勻隨機整數(shù),試寫一個方法 rand10 生成 [1,10] 范圍內(nèi)的均勻隨機整數(shù)。
你只能調(diào)用 rand7() 且不能調(diào)用其他方法。請不要使用系統(tǒng)的 Math.random() 方法。
每個測試用例將有一個內(nèi)部參數(shù) n,即你實現(xiàn)的函數(shù) rand10() 在測試時將被調(diào)用的次數(shù)。請注意,這不是傳遞給 rand10() 的參數(shù)。
解題思路:數(shù)學(xué)規(guī)律
-
規(guī)律1:
randX-1=【0,X-1】==a
randY=【1,Y】==b
那么ab就會是下面的表格,即所有的隨機數(shù)都有了
randXY=(randX-1)*X+randY;
-
規(guī)律2
randX%N+1 可以用randX模擬randN【但是這一部分只能在N的倍數(shù)內(nèi),超出部分要舍棄—這也是while(true)的意義】
/*** The rand7() API is already defined in the parent class SolBase.* public int rand7();* @return a random integer in the range 1 to 7*/ class Solution extends SolBase {public int rand10() {//while的 意義是有一些數(shù)組遍歷不到,重來。比如說1-49 41-49就遍歷不到//后面的81 也遍歷不到while(true){int num=(rand7()-1)*7+rand7(); //==rand49() randX*Y=(randX()-1)*X+randYif(num<=40) {return num%10+1;}else{//這里是41-49 %10----1-9 rand9 減少丟棄的數(shù)字int a=(num-1)*9+num;if(a<=80) {return num%10+1;}}}} }總結(jié)
以上是生活随笔為你收集整理的leetcode 470. 用 Rand7() 实现 Rand10()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多写写 leetcode 43. 字符串
- 下一篇: 322. 零钱兑换