leetcode 470 用 Rand7() 实现 Rand10()

109 阅读1分钟

leetcode 470 用 Rand7() 实现 Rand10()

思路

  1. 使用 rand7() 获取一个 1~6 的数 a;
  2. 使用 rand7() 获取一个 1~5 的数 b;
  3. 1~6 的是否为单数的概率是 0.5;
  4. 就根据这个概率去取 0 或 5 + b;

题解

class Solution {
public:
    int rand10() {
        int a = rand7(), b = rand7();
        // 使用 rand7() 获取一个 1~6 的数 a
        while(a == 7) a = rand7();
        // 使用 rand7() 获取一个 1~5 的数 b;
        while(b > 5) b = rand7();
        // 取 0 或 5 + b
        return (a & 1 ? 0 : 5) + b;
    }
};