不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。
LeetCode:原题地址
题目要求
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
示例 1:
输入: 1
输出: [7]
示例 2:
输入: 2
输出: [8,4]
示例 3:
输入: 3
输出: [8,1,10]
提示:
- rand7 已定义。
- 传入参数: n 表示 rand10 的调用次数。
思路
首先获取等概率的 1,2,3,4,5 (如果rand7()结果>5则抛弃重新来一次 根据对称性原理 1,2,3,4,5等概率) 再以50%的概率是否加上5 这样可以得到等概率的1-10
var rand10 = function() {
// 等概率1-5
let result = rand7()
while(result>5) result = rand7()
// 等概率1-6
let temp = rand7()
while(temp === 7) temp = rand7()
return temp <= 3 ? result : result + 5
};