🗒️470. 用 Rand7() 实现 Rand10()
2024-12-25
| 2024-12-25
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Dec 25, 2024 11:53 AM
给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。
你只能调用 rand7() 且不能调用其他方法。请不要使用系统的 Math.random() 方法。
每个测试用例将有一个内部参数 n,即你实现的函数 rand10() 在测试时将被调用的次数。请注意,这不是传递给 rand10() 的参数。

用随机来模拟随机

拒绝采样方法

notion image

万能构造法

randA() 构造 randB() 时,需要找一个最大质因子不超过 A 的数 n (n>=B),然后对 n 分解质因子就能找到每个采样需要取多少种结果。实际到具体数字时,可以把部分质因子合并成不超过 A 的数,从而减少采样次数。
例如:10,可以分解为 2,5都是小于 7 的最大质因子。
100 可以分解为 4,4,5;

📎 参考

  • 【题单】数学算法
  • 528. 按权重随机选择384. 打乱数组
    Loading...