题目:
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
思路:
设法取到等分的目标概率(每个可能性相等就好,可以超出)
等分公式: n * (randN -1) +( randN-1)
去适量的可能性即可,超过就重新来一遍。
代码:
class Solution extends SolBase {
public int rand10() {
int res = 40;
while (res >= 40) {
res = 7 * (rand7() - 1) + (rand7() - 1); //rand10可以通过对10取余+1得到。rand7()-1产生0~6,7*(rand7()-1)产生[0,7,14,21,28,35,42],再加rand7()-1得到0~49,舍去大于等于40的部分即可
}
return res % 10 + 1;
}
}