题目描述
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。
示例 1:
输入: 1
输出: [7]
示例 2:
输入: 2
输出: [8,4]
示例 3:
输入: 3
输出: [8,1,10]
提示:
rand7 已定义。
传入参数: n 表示 rand10 的调用次数。
调用尽可能少的rand7,使得生成的rand10每个数概率相等,调用一次rand7是不够的,需要调用两次,调用两次可以形成49个数,有9个数字是多余的,因此如果调用两次后数字大于40就需要重新生成,否则直接取模+1,取模生成的结果是0-9,加一才可以形成1-10的数字。
class Solution {
public:
int rand10() {
int t = (rand7()-1)*7+rand7();
if(t>40) return rand10();
return t%10+1;
}
};