问题
已有方法 rand7() 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
例子
思路
最开始向让1到7直接映射到1到10,但没法实现
考虑把1到7映射到更大,囊括1到10,然后缩小。
单纯的加法不可以,因为向5有两种组合3+2,1+4,3只有一种1+2
使用
[
r
a
n
d
7
(
)
−
1
]
∗
7
+
r
a
n
d
7
(
)
[rand7()-1]*7+rand7()
[rand7()−1]∗7+rand7()
(0~6)*7+17->149每个数都是等比例
如果得到>40则重新获取,否则num%10+1【n%10+1=0~9 +1=1~10]
-
方法1
$$$$
-
方法2
$$$$
代码
//方法1
class Solution extends SolBase {
public int rand10() {
int a = (rand7()-1)*7+rand7();
while(a>10)
a = (rand7()-1)*7+rand7();
return a;
}
}
//方法2
class Solution extends SolBase {
public int rand10() {
int a = (rand7()-1)*7+rand7();
while(a>40)
a = (rand7()-1)*7+rand7();
return a%10+1;
}
}