Java教程

470. 用 Rand7() 实现 Rand10()

本文主要是介绍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;
        }
        
    }
}

这篇关于470. 用 Rand7() 实现 Rand10()的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!