优秀题解:
从抛硬币开始,循序渐进把这道题吃透!看不懂算我输!
/** * 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; } } }