470. 用 Rand7() 实现 Rand10()

优秀题解:
从抛硬币开始,循序渐进把这道题吃透!看不懂算我输!

/**
 * The rand7() API is already defined in the parent class SolBase.
 * public int rand7();
 * @return a random integer in the range 1 to 7
 */
class Solution extends SolBase {
    public int rand10() {
   //rand7()-1随机产生一个7进制整数
   //随机产生两位7进制整数(rand7()-1)*7+rand7()-1.范围是0-48
   //这是为什么*7的理由
   //那就当产生1-10就返回就好了,其他数忽略,继续产生
   //也可以扩大选择的数选[1,40]的数,这样拒绝的数少了
   //[1,40]的数取10余,产生[0,9]的数,加1返回
   //排除的数越少,时间越少。两种方法是18ms到5ms的提升
        int x=0;
        while(true){
            x=(rand7()-1)*7+rand7()-1;
            if(x>=1&&x<=40)
            return x%10+1;
        }
        
    }
}

上一篇:p144 用 rand7() 实现 rand10() (leetcode 470)


下一篇:re不同版本调研