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