「每日LeetCode」2021年9月5日

本文最后更新于:2023年3月19日 晚上

Lt470. 用 Rand7() 实现 Rand10()

470. 用 Rand7() 实现 Rand10()

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
示例 1:

1
2
输入: 1
输出: [7]

示例 2:

1
2
输入: 2
输出: [8,4]

示例 3:

1
2
输入: 3
输出: [8,1,10]

提示:

  1. rand7 已定义。
  2. 传入参数: n 表示 rand10 的调用次数。

进阶:

  1. rand7()调用次数的 期望值 是多少  ?
  2. 你能否尽量少调用 rand7() ?

思路

将生成 10 分为两部分,一个是 0 或者 5,一个是 0-5。分别是 a 和 b,由是否偶数来判断 a 是 0 还是 5,所以 a 不能等于 7,同时 0-5 所以 b 不能大于 5,最后加起来返回即可。

解答

1
2
3
4
5
6
7
8
9
10
11
12
/**
* The rand7() API is already defined for you.
* var rand7 = function() {}
* @return {number} a random integer in the range 1 to 7
*/
var rand10 = function () {
let a = rand7(),
b = rand7();
while (a === 7) a = rand7();
while (b > 5) b = rand7();
return (a % 2 === 0 ? 0 : 5) + b;
};