470. 用 Rand7 实现 Rand10
思路:
这一题,我也没想出答案,看了评论这个答案才发现我有多菜(;´༎ຶД༎ຶ`)
枚举如下:
a 1 2 3 4 5 6 7
b
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 0
4 5 6 7 8 9 0 1
5 6 7 8 9 0 1 2
6 7 8 9 0 1 2 3
7 8 9 0 1 2 3 4
去掉右上角的
6 7 8
7 8 9
8 9 0 后
每个数字的出现次数为4次,0-9的概率相同
所以程序思路就很明了,当结果扫到右上角的时候进行递归调用,直到输出其他结果
a=rand7(); b=rand7();
if(a>4&&b<4) return rand10();
else return (a+b)%10+1;
根据分析写出代码:
class Solution extends SolBase {
public int rand10() {
int a=rand7();
int b=rand7();
if(a>4&&b<4)
return rand10();
else
return (a+b)%10+1;
}
}
我就有个疑问,怎么发现去掉右上角后,每个数字的出现次数为4次,0-9的概率相同这个规律的呢?(@_@; )也许这就是大佬吧~
还可以这样写,就可以推广到任意rand啦:
public int rand10() {
int res = 0;