LeetCode 470 用 Rand7() 实现 Rand10()

题目描述

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

不要使用系统的 Math.random() 方法。

题解

(rand_Y - 1) * X + rand_X => 可以生成[1, X*Y]的等概率随机数。
在本题中,可生成1-49的随机数,我们可以只取前40个,当数字大于40时,继续产生1-49的随机数,直到小于等于40停止。
在得到1-40的随机数后,对10取余再加1,即可得到1到10范围内的随机数字

代码

class Solution {
public:
    int rand10() {
        int ans = 0;
        do{
            ans  = (rand7() - 1) * 7 + rand7();
        }while(ans > 40);

        return ans % 10 + 1;
    }
};
posted @ 2020-05-17 22:18  阳离子  阅读(324)  评论(0编辑  收藏  举报