算法 470. 用 Rand7() 实现 Rand10() python

2022.07.24
470. 用 Rand7() 实现 Rand10()
算法 470. 用 Rand7() 实现 Rand10() python_第1张图片

思路 拒绝采样

应该用两个 r a n d ( 7 ) rand(7) rand(7),构成一个二维的平面,然后将其中的一些点均分成10份,每一份代表 1 − 10 1-10 110中的一个数字,就实现 r a n d ( 10 ) rand(10) rand(10)了。

# The rand7() API is already defined for you.
# def rand7():
# @return a random integer in the range 1 to 7

class Solution(object):
    def rand10(self):
        """
        :rtype: int
        """
        while True:
            row, col  = rand7(), rand7()
            idx = (row - 1) * 7 + col # (行数 - 1) * 7 + 所在的列数
            if idx <= 40:
                return 1 + (idx - 1) % 10 # 对10进行取余

leetcode中的官方题解讲的很详细,还计算了 r a n d ( 7 ) rand(7) rand(7)的调用期望。

你可能感兴趣的:(算法面经编程题,算法,leetcode,职场和发展)