使用提供的rand7实现rand10,要求随机数字出现的概率相同,这个问题如果反过来要求rand10实现rand7就比较简单了,每次调用rand10,如果返回的数据在1-7直接返回,否则使用rand10重新生成。
按照相同的思路,我们调用多次rand7,比如尝试构造rand7 + rand7,范围是2-14无法等概率求解,我们可以使用rand7 * rand7,范围是1-49,如果生成的范围在1-40,那么我们直接对10取余加一即可,如果在40-49这个范围那么重新生成。视频题解参考

// The rand7() API is already defined for you.
// int rand7();
// @return a random integer in the range 1 to 7

class Solution {
public:
    int rand10() {
        int rand40 = 41;
        while(rand40 > 40)
        {
            rand40 = rand7() + (rand7() - 1) * 7;
        }
        
        return rand40%10 + 1;
    }
};